CVE-2025-65026esm.sh是一个面向现代Web开发的无构建内容分发网络(CDN)。在版本136之前,该服务在CSS到JavaScript模块转换功能中存在模板字面量注入漏洞(CWE-94)。当用户请求带?module参数的CSS文件时,esm.sh会将CSS内容直接嵌入到JavaScript模板字符串中,而未进行适当的清理和转义处理。攻击者可以利用CSS文件中的${...}表达式注入恶意JavaScript代码。当受害者的应用程序导入该模块时,恶意代码将在浏览器中执行,导致跨站脚本攻击(XSS)。在Electron应用程序中,此漏洞甚至可以进一步利用实现远程代码执行(RCE),因为Electron环境对Node.js API的访问限制较为宽松。该漏洞影响所有使用esm.sh CDN服务进行CSS模块导入的Web应用程序和Electron应用。
漏洞根源在于esm.sh的CSS模块转换逻辑。当解析到带有?module查询参数的CSS文件请求时,服务端代码会生成类似如下的JavaScript模块代码:export default `原始CSS内容`; 攻击者可以在上传或引用的CSS文件中插入JavaScript模板表达式,如:.class { color: ${alert(document.cookie)} }。当受害者的前端代码通过import语句加载该CSS模块时,${}表达式会被JavaScript引擎解析执行,从而触发任意JavaScript代码执行。在Electron应用中,由于默认启用了nodeIntegration且上下文隔离配置可能不当,攻击者可以进一步利用child_process模块执行系统命令,实现完整的远程代码执行。修复方案是在将CSS内容嵌入模板字符串前,对所有特殊字符进行转义处理,或使用安全的字符串拼接方式替代模板字面量。