紧急预警|CVE-2026-71319/71320/71321Nuxt.js框架三连击:开发机RCE+生产RCE+无认证DoS

admin 2026-08-09 05:22:32 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 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安全,安全工具,解决方案


cover_image

紧急预警|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 校验,而其他修改类方法都走了。

攻击链:

  1. 攻击者连上 WebSocket,调用 updateOptions('behavior', { openInEditor: '<恶意命令>' })——把”打开编辑器”的命令改成任意程序

  2. 然后调用 openInEditor('<任意已存在的文件>')——Nuxt 会用 launch-editor 包把这个值当子进程 spawn 出来

  3. 你的开发机上就执行了攻击者的命令

🔥 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)

  1. 开发环境不要把 Vite HMR 端口暴露到公网或可被横向访问的网段

  2. 如果必须远程开发,用 SSH 隧道或 VPN 隔离,不要直接暴露 WebSocket 端口

  3. 在 nuxt.config.ts 中关闭 DevTools:

export default defineNuxtConfig({

  devtools: { enabled: false }

})

针对 71320(Server Island RCE)

  1. 如果不需要运行时模板编译,关闭 vue.runtimeCompiler:

export default defineNuxtConfig({

  vue: { runtimeCompiler: false }

})

  1. 如果必须开启 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》

评论:0   参与:  0