安全事件来源及参考解决方案
https://www.cve.org/CVERecord/SearchResults?query=vue
https://security.snyk.io/package/npm/vue
https://www.herodevs.com/support/nes-vue
https://www.herodevs.com/vulnerability-directory?4496ac32_Technology_equal=%5B%22Vue+2%22%5D
https://www.cve.org/CVERecord?id=CVE-2024-9506
https://www.herodevs.com/vulnerability-directory/cve-2024-9506?nes-for-vue-2
https://security.snyk.io/vuln/SNYK-JS-VUE-8219889
漏洞概述 CVE-2024-9506是Vue 2中的一个正则表达式拒绝服务(ReDoS)漏洞,影响Vue 2编译器。该漏洞在处理特定模板字符串时,可能导致应用程序性能显著下降。 影响范围
- 受影响的版本:>= 2.0.0 < 3.0.0
- 受影响的组件:compiler-sfc, server-renderer, template-compiler, vue-template-compiler, vue-server-renderer 4 漏洞详情
该漏洞存在于Vue的parseHTML()函数中,当模板字符串包含
<script>、<style>或<textarea>标签但没有匹配的闭合标签时,会触发有缺陷的正则表达式处理,导致模板解析过程中出现显著延迟。
修复说明
- 修复位置:
src/compiler/parser/html-parser.ts - 修复策略:移除明文标签分支中基于整段模板的正则替换,改为使用
indexOf线性查找闭合标签,避免缺失闭合标签时触发正则回溯退化。 - 回归测试:
test/unit/modules/compiler/parser.spec.ts - 覆盖链路:
vue主包编译器、packages/template-compiler、packages/compiler-sfc、packages/server-renderer均复用该解析逻辑,构建后会一并带上修复。
目标:仅维护 Vue 2.7 版本,用 patch-package 方式支持多个现有 Vue 2 项目,便于快速整改和通过安全评测。
维护原则
- 只维护
2.7版本线。 - 非
2.7项目先升级到2.7.16,再接入安全补丁。 - 默认采用
patch-package,因为补丁文件可以直接入库,便于审计、送检和复核。 - 统一 fork 仓库继续作为补丁源码来源,但项目侧优先消费 patch 文件,而不是优先切私有包。
推荐流程
- 盘点项目当前 Vue 版本和构建链。
- 非
2.7项目先升级到2.7.16。 - 按项目生成
patch-package补丁并提交。 - 重新安装依赖,自动回放 patch。
- 进行安全扫描复验并保留扫描结果。
第一步:先统一升级到 Vue 2.7
升级原则
2.6.x项目不单独维护,直接升级到2.7.16。- 升级时保持
vue与编译器包版本严格一致。 - 先完成版本升级,再做安全 patch;不要把“版本升级”和“漏洞 patch”混成一次大改,方便回归和审计。
常见依赖对应关系
- Webpack / Vue CLI 项目
vue: 2.7.16vue-template-compiler: 2.7.16
- Vue 2.7 + 新版 SFC 工具链项目
vue: 2.7.16@vue/compiler-sfc: 2.7.16
- SSR 项目
- 额外检查
vue-server-renderer是否与vue同版本
- 额外检查
第二步:按项目生成 patch-package
适用原因
- 补丁文件直接进入业务项目仓库,审计人员可以直接看到改动内容。
- 不依赖内部 npm 镜像解释,安全评测时更容易说明“修了哪里、怎么修的”。
- 后续项目重新安装依赖时,通过
postinstall自动生效。
项目内操作步骤
- 安装
patch-package。 - 修改
node_modules中对应包的编译器文件。 - 生成 patch 文件。
- 提交
patches/*.patch和package.json脚本改动。
安装示例
npm i -D patch-packagepackage.json
{
"scripts": {
"postinstall": "patch-package"
}
}需要 patch 的典型文件
- Webpack / Vue CLI 项目
node_modules/vue-template-compiler/build.js
- Vue 2.7 + SFC 工具链项目
node_modules/@vue/compiler-sfc/dist/compiler-sfc.js
- SSR 项目
node_modules/vue-server-renderer/build.dev.jsnode_modules/vue-server-renderer/build.prod.js
说明
- 大多数预编译模板项目,重点是
vue-template-compiler。 - 使用
@vue/compiler-sfc的项目,需要同步 patchcompiler-sfc。 - 使用 SSR 的项目,需要同步 patch
vue-server-renderer的编译产物。 - 是否 patch
vue本体,取决于项目是否在运行时使用“带编译器的完整构建”。
生成 patch 示例
单包项目
npx patch-package vue-template-compiler多包项目
npx patch-package vue-template-compiler @vue/compiler-sfc vue-server-renderer推荐提交内容
package.json中的postinstallpatches/vue-template-compiler+2.7.16.patchpatches/@vue+compiler-sfc+2.7.16.patchpatches/vue-server-renderer+2.7.16.patch- 一份内部整改说明,标记对应漏洞编号
验收检查
- 锁定
vue与vue-template-compiler或@vue/compiler-sfc的版本对应关系。 - 构建一次生产包,确认编译链无版本不匹配错误。
- 对 SAST / SCA 扫描结果做一次复扫,确认漏洞编号消失,或在补丁证明材料中可说明已修复。
- 对使用 SFC、SSR、运行时模板编译的项目各选一个样板项目做回归验证。
安全评测建议材料
- 漏洞编号:
CVE-2024-9506/SNYK-JS-VUE-8219889 - 受影响包列表
- patch 文件
- patch 前后 diff
- 对应测试记录或构建记录
- 一份整改说明,说明“项目已升级至 Vue 2.7.16,并通过 patch-package 修复编译器 ReDoS 漏洞”
标准模板
- 可直接复用的模板目录:
templates/vue2-security-patch-package/ - 包含
package.json片段、patch 生成步骤、整改说明模板和验收清单
https://www.cve.org/CVERecord?id=CVE-2024-6783
https://www.herodevs.com/vulnerability-directory/cve-2024-6783?nes-for-vue-2
漏洞概述 CVE-2024-6783是Vue 2中的一个跨站脚本(XSS)漏洞,影响Vue 2模板编译器的"完整构建"版本。这是自2018年以来Vue 2发现的第一个CVE漏洞。 6 影响范围
- 受影响的版本:>= 2.0.0 < 3.0.0
- 受影响的组件:vue-template-compiler 8 漏洞详情
该漏洞存在于Vue 2的浏览器内模板编译器中,该编译器负责创建代码字符串以执行,使组件模板如
<div>{{ variables }}</div>能被解析并转换为渲染函数。这些渲染函数随后在字符串化的eval语句中被Vue执行,从而允许第三方脚本运行任意代码。
只有某些属性在扩展Object.prototype时容易受到客户端XSS漏洞的影响。其中一个属性是staticClass,当模板字符串使用具有非动态类的class属性时,在AST构建阶段会检索该属性。
仅影响2.6特定版本,升级到2.7新版本即可。