Release·  

Nuxt 安全补丁发布

Nuxt 4.5.1 和 3.21.10 现已发布,修复了若干安全问题,同时 @nuxt/devtools 3.3.1 中也有一个关键修复。我们建议尽快升级。
Daniel Roe

Daniel Roe

@danielroe.dev

我们已发布 Nuxt 4.5.1Nuxt 3.21.10,它们是 4.x 和 3.x 发布线的安全补丁版本。我们建议现在就升级:

npx nuxt upgrade --dedupe

刷新你的锁文件还会拉取 @nuxt/devtools@3.3.1,它修复了一个独立的、仅在开发环境中存在的关键问题,所以请确保它也被更新。

如果由于某些原因你无法升级到已修补的版本(例如,你被固定在较旧的发布线),Socket 提供了 Nuxt 的认证补丁,可作为临时措施应用于各个发布线。升级仍然是推荐的修复方式。
如果你已经因为之前的路由规则公告 (CVE-2026-53721) 而升级过,你仍然需要这个版本。下面提到的问题之一是由那个修复本身引入的回归,因此即使使用 4.4.7+ 或 3.21.7+ 也不能保证安全。

🔍 修复了什么

下面链接的安全公告包含完整详情。简要说明如下,并附上你是否可能受到影响的说明:

通过 server island props 导致的服务端远程代码执行(高)

GHSA-9473-5f9j-94wq

只有在你启用了 vue.runtimeCompiler(默认关闭),并且使用了服务端组件或 islands,且这些 props 能够到达 Vue 的动态组件解析时,你才会受到影响:<component :is>resolveDynamicComponenth(),或者多态的 as / asChild prop,例如 @nuxt/ui 通过 reka-ui 暴露的那种。在这种配置下,攻击者可以向 island props 注入一个 template 键,并让 Vue 的运行时编译器在服务端(Nitro)进程中执行任意代码。由于 vue.runtimeCompiler 默认关闭,大多数应用不会受到影响,但在满足前置条件时,影响就是完整的服务端远程代码执行。

通过 server island props 未授权实例化组件(中)

GHSA-48hr-524c-v5w3

这与上面的问题密切相关,但不需要 vue.runtimeCompiler,因此影响范围更广。如果某个服务端 island 将一个未声明的 prop 传递给多态的 as 根节点(同样是 @nuxt/ui / reka-ui 模式,也包括通过 Vue 的属性透传隐式发生的情况),攻击者就可以传入一个普通字符串,例如 { "as": "iframe" },或者一个全局注册组件的名称,从而实例化任意 HTML 元素或组件。它不能导致代码执行。声明 island 接受的 props,或者在其上设置 inheritAttrs: false,也可以防止这个问题。

路由规则授权绕过(高)

GHSA-hxvh-4h3w-prp9

如果你依赖带有 appMiddlewarerouteRules 作为授权门禁,并且任何规则键包含大写字符,就会受到影响;无论这些键是来自 pages/Admin.vue 之类的页面文件,还是显式写成 routeRules: { '/Admin': ... }。区分大小写的路由(默认行为)会正常提供页面,但该规则及其 middleware 会被静默跳过。上面提到的就是这个回归问题。

现在路由规则会像 vue-router 默认行为一样,忽略大小写进行匹配。如果你有意依赖大小写敏感的路由规则匹配,请设置 router.options.sensitive: true

服务端组件拒绝服务(高)

GHSA-hxcr-hm88-mpq6GHSA-9pgf-384g-p7mv

如果你的应用使用了服务端组件或 islands(/__nuxt_island 端点),你就会受到影响。未认证请求可以通过对某个 prop 展开 v-for 来崩溃服务器,或者在请求体被拒绝之前,先消耗 CPU 去解析和哈希一个过大的请求体。

缓存页面上的跨用户 payload 泄露(高)

GHSA-wm8w-6qjm-cv43,仅 4.x 受影响(>= 4.4.0;3.x 分支不受影响)

如果你在会渲染用户特定数据的已认证页面上使用 cacheswrisr 路由规则,就会受到影响。即使 HTML 已经正确区分了不同用户,缓存的 _payload.json 仍可能被提供给其他用户或未认证访客。

升级后,请清除任何可能已经保存了泄露 _payload.json 的 CDN 或边缘缓存。错误的响应可能已经被缓存在上游,仅升级并不会将其驱逐。

开发服务器路径泄露(低)

GHSA-7c4v-fwgw-9rf7

只有在你将开发服务器绑定到网络接口(nuxi dev --host),并且运行在不受信任的网络上时,你才会受到影响。Chrome DevTools workspace 端点会向局域网客户端泄露项目的绝对路径和一个 workspace UUID。

Nuxt DevTools 远程代码执行(严重,仅开发环境)

GHSA-279x-mwfv-vcqv,已在 @nuxt/devtools@3.3.1 中修复

如果你在启用 DevTools 的情况下运行 nuxt dev,就会受到影响。一个通过 Vite HMR socket 暴露的未认证 RPC 方法,可能在你的机器上执行任意命令;该命令可由主机上的其他进程、使用 --host 时的局域网同伴,或者在开发服务器运行期间你访问的恶意网站触发。这不会影响生产环境,但请确保你的 lockfile 已获取到新版本。

💚 感谢

非常感谢这些负责任地报告这些问题的研究人员:Pig-Tailsec-reexDavidCarliezmanop55555dinhvarenquantumshiroSaku0512TazmiDev

这些报告是通过 GitHub 的私密安全通告流程提交的,其中一项是通过 HackerOne 上的 Vercel OSS Bug Bounty program 送达我们的。对于服务器端远程代码执行问题,我们还与 Vercel、Netlify 和 Cloudflare 的团队进行了合作,提前发出通知,以便他们能在这次披露之前部署防护措施。

如果你认为自己在 Nuxt 中发现了漏洞,请通过相关仓库的 Security tab 私下报告,或者在无法这样做的情况下发送电子邮件至 security@nuxtjs.org。我们非常感谢负责任的披露。