一、你为什么搜到这篇

如果你正遇到以下任意一种情况,本文给出的方案可以直接套用:

  • pnpm audit / npm audit 报出 vue / vue-template-compiler / @vue/compiler-sfc 相关高危漏洞;
  • Snyk、Dependabot、绿盟、奇安信等扫描工具针对 CVE-2024-9506(ReDoS)CVE-2024-6783(XSS / 原型污染) 告警;
  • 公司合规要求提交"Vue 2 漏洞处理方案",但你知道 Vue 2 已 EOL,官方不会再发版
  • 项目还在用 Vue 2.7.16,短期内升不到 Vue 3

下面给出可直接照抄的解决方案。


二、解决方案速览

接入一个只修 CVE、不改 API的开源 Vue 2.7.16 安全分支:

  • 仓库https://github.com/joygqz/vue
  • 当前版本v2.7.16-security.1
  • 接入成本:改一行 package.json业务代码零修改
  • 协议:MIT(沿用原作者 Yuxi You 授权)

三、已修复的漏洞清单

CVE 编号 漏洞类型 影响模块 危害
CVE-2024-9506 ReDoS(正则灾难性回溯) 模板编译器 html-parser 恶意输入下模板编译卡死
CVE-2024-6783 XSS / 原型污染 codegen(class / style / SSR) 生成代码可被注入
多项传递依赖 CVE 多种 构建链依赖 SCA 工具报红、合规过不去

pnpm audit 结果:装上该分支后仅剩 1 个 low(elliptic,上游未修,全 npm 生态无法消除)——等于红灯转绿


四、接入步骤(可直接照抄)

步骤 1:修改 package.json

dependencies 里的 Vue 相关依赖替换为 git tag 形式:

{
  "dependencies": {
    "vue": "git+https://github.com/joygqz/vue.git#v2.7.16-security.1",
    "vue-template-compiler": "git+https://github.com/joygqz/vue.git#template-compiler-v2.7.16-security.1",
    "vue-server-renderer": "git+https://github.com/joygqz/vue.git#server-renderer-v2.7.16-security.1",
    "@vue/compiler-sfc": "git+https://github.com/joygqz/vue.git#compiler-sfc-v2.7.16-security.1"
  }
}

说明:按需保留,没用到的子包不写即可。npm / pnpm / yarn 都支持 git+url 协议,不需要 patch-packagepnpm overrides

步骤 2:删除 lock 文件并重装

# pnpm 用户
rm pnpm-lock.yaml && pnpm install

# npm 用户
rm package-lock.json && npm install

# yarn 用户
rm yarn.lock && yarn install

步骤 3:验证安装版本

node -p "require('vue/package.json').version"
# 输出:2.7.16-security.1

步骤 4:重新跑安全扫描

pnpm audit
# 预期:仅剩 1 个 low(elliptic),其它高危漏洞已修复

业务代码里所有 import Vue from 'vue' 一行都不用动,组件、路由、Vuex 全部正常工作。


五、为什么可以放心用(合规角度)

这是上线前合规评审最关心的部分,整理如下:

  1. 完全开源 + MIT 协议,沿用 Vue 原作者 Yuxi (Evan) You 授权,法务无障碍;

  2. 每个 tag 一一对应一个 commit hash,可直接 diff 上游 2.7.16 给安全/合规同事审计;

  3. 边界明确:只修已披露 CVE,不引入任何新特性、不修改任何 API

  4. 修复粒度极小,以 CVE-2024-9506 为例,核心修复就一行——给正则加个 ^ 锚点:

    - new RegExp('([\\s\\S]*?)(</' + stackedTag + '[^>]*>)', 'i')
    + new RegExp('^([\\s\\S]*?)(</' + stackedTag + '[^>]*>)', 'i')
    

    diff 干净到可以一眼看完,不存在夹带私货的空间。

可以把上面四条直接复制进你的"漏洞处理方案"文档作为答复证据。


六、常见问题排查

Q1:pnpm install 卡在 clone 仓库

git+url 首次安装需要 clone 一次仓库,比 npm 镜像慢。可配置 git 走代理或使用国内镜像加速,CI 缓存命中后基本无感。

Q2:CI 环境 git clone 失败

需要确保 CI 容器内有 git 命令,并且能访问 github.com企业内网建议:把仓库镜像到公司 GitLab,把 git+https://github.com/joygqz/vue.git 改成内网地址即可,依赖关系不变。

Q3:装完版本不对

清理一下缓存:

pnpm store prune        # 或 npm cache clean --force
rm -rf node_modules
pnpm install

再跑 node -p "require('vue/package.json').version" 确认。

Q4:webpack + vue-loader@15 项目能用吗

可以。仓库内附了一个 demo-vue/ 集成 demo(webpack 4 + vue-loader@15),clone 下来能直接跑通。

Q5:@vue/compiler-sfc 我没用过,需要装吗

按需。只有你的构建链/单元测试链直接依赖 @vue/compiler-sfc 时才装,否则不需要。


七、适用范围

适用:

  • 跑在生产、短期内无法升级到 Vue 3 的老项目;
  • pnpm audit / Snyk / Dependabot 等 SCA 工具卡住合规上线的团队;
  • 政企/银行/医疗等交付项目,甲方要求"必须有明确维护方";
  • 国企内网项目,需要一份可镜像到内网 GitLab 的私有 fork。

不适用:

  • 新项目(请直接使用 Vue 3 + Vite);
  • 希望持续拿到新特性的项目(这里永远不会有新特性,这是设计);
  • 期望"官方背书"的项目(这是个人维护的安全分支,非官方产物)。

八、后续维护

  • 新披露、影响 Vue 2.7.16 的 CVE 会持续跟进,发布 v2.7.16-security.2.3 …… 升级时只需把 package.json 里的 tag 改成新版本号;
  • 欢迎在 GitHub issue 区上报漏洞、提交 PR 修复;
  • 功能 PR 一律不收——这是这个分支能被信任、能被安全审计接受的边界。

九、参考资料


觉得有用的话,欢迎收藏 + 点赞 + 关注,后续每修一个新 CVE 都会同步更新本文。也欢迎转发给身边还在维护 Vue 2 项目的同事。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐