文章总结: Nuxt.js框架被曝三个高危漏洞:CVE-2026-71319为开发机远程代码执行(RCE),CVE-2026-71320为生产服务器模板注入RCE,CVE-2026-71321为无认证拒绝服务(DoS)。影响范围广,攻击链可组合利用。官方已发布修复版本,建议立即升级@nuxt/devtools至3.3.1以上,nuxt主框架至3.21.10或4.5.1以上。无法升级时可通过关闭DevTools、禁用runtimeCompiler、限制Island端点请求体大小等方式临时缓解。 综合评分: 87 文章分类: 漏洞分析,应急响应,WEB安全,安全工具,解决方案
紧急预警|CVE-2026-71319 / 71320 / 71321Nuxt.js 框架三连击:开发机 RCE + 生产 RCE + 无认证 DoS
撅人
2026年8月7日 00:00 广东
在小说阅读器读本章
去阅读
⚠️ 一句话:Nuxt.js 今天被锤出三个洞——DevTools WebSocket 没认证能 RCE 开发机、Server Island 模板注入能 RCE 生产服务器、Island 端点不用认证就能 CPU 耗尽打瘫。用 Nuxt 的团队,今天就得动。
🔍 漏洞速览
| 编号 | 类型 | CVSS(预计) | 攻击前提 | 影响组件 | 核心风险 | | — | — | — | — | — | — | | CVE-2026-71319 | 远程代码执行 | 9.8(危) | 能访问 Vite HMR WebSocket | @nuxt/devtools < 3.3.1(开发模式) | WebSocket 调 RPC 链式利用,开发机执行任意命令 | | CVE-2026-71320 | 服务端模板注入 → RCE | 9.8(危) | vue.runtimeCompiler: true | nuxt 3.4.0~3.21.10、4.x~4.5.1 | Server Island props 注入模板,Nitro 进程执行任意代码 | | CVE-2026-71321 | CPU 耗尽 DoS | 7.5(高) | 无需认证 | nuxt 3.1.0~3.21.10、4.x~4.5.1 | 大 JSON body 先解析哈希后验签,单线程事件循环卡死 |
✅ 好消息:三个漏洞均已有修复版本。今天就把版本升上去。
💥 核心危害
🚨 开发机也能被打(CVE-2026-71319):你以为开发模式不暴露公网就安全了?只要 Vite HMR 的 WebSocket 端口能被访问到(内网横向、端口转发、甚至恶意网页利用 WebSocket),攻击者就能通过 DevTools 的 RPC 通道在你的开发机上执行任意命令。开发机上有什么?SSH 密钥、生产环境凭证、数据库密码、源代码——全裸。
🚨 生产服务器直接 RCE(CVE-2026-71320):开了 vue.runtimeCompiler: true 的 Nuxt 生产环境,攻击者通过 /__nuxt_island/ 端点注入模板指令,直接在 Nitro 服务端进程执行代码。不需要认证,不需要登录——只要你的 Nuxt 服务跑在公网上,就能被打。
🚨 无认证打瘫服务(CVE-2026-71321):攻击者不需要有效哈希、不需要认证,只要往 /__nuxt_island/_.json POST 一个超大 JSON body,Nitro 的单线程事件循环就会卡在解析和哈希上,所有并发请求全部排队等死。一个脚本就能让你的 Nuxt 站点彻底瘫痪。
🚨 三个洞可以组合打:先用 71321 打瘫服务做干扰,趁运维手忙脚乱时用 71320 注入持久化后门,再通过被攻陷的生产环境反查开发机信息,用 71319 拿下开发机——从生产到开发,一条龙收割。
🧠 漏洞原理(人话版)
Nuxt.js 是 Vue.js 生态最流行的 SSR 框架,国内大量团队在用。这次三个洞分别打在不同的功能模块上。
🔥 CVE-2026-71319 — DevTools WebSocket RPC 没认证 → 开发机 RCE
Nuxt DevTools 在开发模式下通过 Vite HMR 的 WebSocket(ws://<host>:<port>/,子协议 vite-hmr)暴露了一个双向 RPC 通道。问题在于——这个通道没有任何认证,不需要 token、不需要握手、不检查 Origin。
更致命的是,updateOptions()、clearOptions() 和 openInEditor() 这三个方法没有走 ensureDevAuthToken 校验,而其他修改类方法都走了。
攻击链:
-
攻击者连上 WebSocket,调用
updateOptions('behavior', { openInEditor: '<恶意命令>' })——把”打开编辑器”的命令改成任意程序 -
然后调用
openInEditor('<任意已存在的文件>')——Nuxt 会用launch-editor包把这个值当子进程 spawn 出来 -
你的开发机上就执行了攻击者的命令
🔥 CVE-2026-71320 — Server Island Props 模板注入 → 生产 RCE
Nuxt 的 Server Islands 功能允许通过 /__nuxt_island/ 端点渲染独立组件。当 vue.runtimeCompiler: true 开启时,攻击者可以通过 props 注入一个 template 键,这个键会被当作动态组件的模板执行。
换句话说,本来是用来传数据的 props,被攻击者塞了一段模板指令进去,Vue 运行时编译器把这段指令编译并执行——从数据变成了代码。
🔥 CVE-2026-71321 — Island 端点先解析哈希后验签 → 无认证 DoS
Nuxt 的 /__nuxt_island/... 端点设计上应该先验证 URL 中的哈希再处理请求。但实际上,它先读取、解析(destr)、哈希(ohash)了攻击者控制的 JSON body,然后才去验证哈希。
攻击者发一个巨大的 JSON body 过来,服务器会老老实实地把整个 body 读完、解析完、算完哈希,最后才发现哈希不对然后拒绝——但 CPU 已经被耗光了。Nitro 跑在 Node.js 单线程事件循环上,一个请求卡住,所有并发请求全部排队。
三个洞的攻击流程:
71319:① 连上 Vite HMR WebSocket → ② 调 updateOptions 改 openInEditor → ③ 调 openInEditor 触发命令执行 → ④ 开发机沦陷
71320:① 找到开启了 runtimeCompiler 的 Nuxt 站点 → ② POST /__nuxt_island/ 带恶意 template props → ③ Vue 编译器执行模板 → ④ 生产服务器 RCE
71321:① 找到任意 Nuxt 站点 → ② POST /__nuxt_island/_.json 带超大 JSON → ③ Nitro 单线程卡死 → ④ 服务瘫痪
⚡ 3 秒自查
🔴 红区(立即检查)
| | | | — | — | | 受影响产品 | Nuxt.js(@nuxt/devtools + nuxt 主框架) | | CVE-2026-71319 | @nuxt/devtools < 3.3.1 (开发模式) | | CVE-2026-71320 | nuxt 3.4.0 ~ 3.21.10、4.x ~ 4.5.1 (需 runtimeCompiler: true) | | CVE-2026-71321 | nuxt 3.1.0 ~ 3.21.10、4.x ~ 4.5.1 (无需任何前提) |
🟢 绿区(已修复)
| | | | — | — | | CVE-2026-71319 | @nuxt/devtools ≥ 3.3.1 | | CVE-2026-71320 | nuxt ≥ 3.21.10 或 ≥ 4.5.1 | | CVE-2026-71321 | nuxt ≥ 3.21.10 或 ≥ 4.5.1 |
自查命令
① 查 Nuxt 版本
在项目目录下
cat node_modules/nuxt/package.json | grep version
或者
npx nuxi info
② 查 DevTools 版本
cat node_modules/@nuxt/devtools/package.json | grep version
③ 查是否开启了 runtimeCompiler(71320 前提条件)
grep -r “runtimeCompiler” nuxt.config.* .nuxtrc
如果 vue.runtimeCompiler: true 出现在配置里——71320 直接可打。
④ 查 Island 端点是否暴露公网(71320/71321 攻击面)
从外网测试
curl -X POST https://<你的域名>/__nuxt_island/_.json \
-H “Content-Type: application/json” \
-d ‘{“test”:1}’
如果返回的不是 404,说明端点暴露——71321 可以直接打你。
⑤ 查 Vite HMR 端口是否暴露(71319 攻击面)
从外网测试 WebSocket 连通性
curl -i -N -H “Connection: Upgrade” -H “Upgrade: websocket” \
-H “Sec-WebSocket-Version: 13” \
-H “Sec-WebSocket-Protocol: vite-hmr” \
http://<你的IP>:<端口>/
如果能连上——开发机 71319 可被打。
🛡️ 修复方案
方案一:升级(根治,立即执行)
修复 71319:升级 DevTools
npm install @nuxt/[email protected]
修复 71320 + 71321:升级 Nuxt 主框架
Nuxt 3.x 用户
npm install [email protected]
Nuxt 4.x 用户
npm install [email protected]
升级后重启开发服务器和生产构建,确认版本号更新。
方案二:临时缓解(升不了级的紧急止血)
针对 71319(DevTools RCE)
-
开发环境不要把 Vite HMR 端口暴露到公网或可被横向访问的网段
-
如果必须远程开发,用 SSH 隧道或 VPN 隔离,不要直接暴露 WebSocket 端口
-
在 nuxt.config.ts 中关闭 DevTools:
export default defineNuxtConfig({
devtools: { enabled: false }
})
针对 71320(Server Island RCE)
- 如果不需要运行时模板编译,关闭 vue.runtimeCompiler:
export default defineNuxtConfig({
vue: { runtimeCompiler: false }
})
- 如果必须开启 runtimeCompiler,用 WAF/反向代理拦截
/__nuxt_island/的 POST 请求中对template键的注入
针对 71321(Island DoS)
在反向代理(Nginx/Caddy)层限制 /__nuxt_island/ 请求的 body 大小:
location /__nuxt_island/ {
client_max_body_size 1k;
limit_req zone=island burst=10 nodelay;
}
用 WAF 规则拦截无哈希的 /__nuxt_island/_.json POST 请求。
方案三:入侵排查清单
开发机(排查 71319)
☐ 检查 Vite HMR 端口是否有陌生 WebSocket 连接记录
☐ 检查 launch-editor 相关进程是否有异常子进程
☐ 检查开发机是否有陌生文件下载、SSH 密钥被读取
☐ 检查 .nuxt/devtools 配置是否被篡改(openInEditor 值)
生产服务器(排查 71320/71321)
☐ 检查 /__nuxt_island/ 端点访问日志是否有大量 POST 请求
☐ 检查 Nitro 进程是否有异常子进程(bash、sh、curl、wget)
☐ 检查服务器 CPU 是否有不明原因的飙升
☐ 检查是否有未授权的模板执行痕迹
检查可疑进程
ps aux | grep -E “bash|sh|curl|wget|nc|python” | grep -v grep
检查 island 端点访问
grep “__nuxt_island” /var/log/nginx/access.log | wc -l
⚠️ 安全提醒
Nuxt.js 是国内 Vue 生态最主流的 SSR 框架,大量团队在用。这次三个洞覆盖了从开发到生产的完整链路——
开发机 RCE:别以为开发模式不暴露公网就安全了。Vite HMR 端口在内网横向、端口转发、甚至恶意网页中都可以被利用。开发机上跑着的 SSH 密钥和生产凭证,一旦泄露就是灾难。
生产 RCE:开了 runtimeCompiler 的团队,你的服务器现在就是裸奔状态。赶紧查配置,能关就关,不能关就上 WAF。
无认证 DoS:这个最简单,一个脚本就能打瘫你的站点。哪怕你不受 71320 影响,71321 也一定能打到你——只要你的 Nuxt 版本在范围内。
好消息是补丁已经有了。今天就把版本升上去,别拖到明天。
转发给你团队的前端工程师和运维,让他们今天就查版本。
📎 参考链接
71319 修复 commit:github.com/nuxt/devtools/commit/a7b2718b
71319 DevTools v3.3.1:github.com/nuxt/devtools/releases/tag/v3.3.1
71319 GHSA:GHSA-279x-mwfv-vcqv
71320 Nuxt v3.21.10:github.com/nuxt/nuxt/releases/tag/v3.21.10
71320 Nuxt v4.5.1:github.com/nuxt/nuxt/releases/tag/v4.5.1
71320 GHSA:GHSA-9473-5f9j-94wq
71321 修复 commit:github.com/nuxt/nuxt/commit/4e35ae9bab
71321 GHSA:GHSA-9pgf-384g-p7mv
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:撅人 《紧急预警|CVE-2026-71319 / 71320 / 71321Nuxt.js 框架三连击:开发机 RCE + 生产 RCE + 无认证 DoS》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论