---
title: "Nuxt 安全补丁发布"
description: "Nuxt 4.5.1 和 3.21.10 现已发布，修复了若干安全问题，同时 @nuxt/devtools 3.3.1 中也有一个关键修复。我们建议尽快升级。"
canonical_url: "https://nuxt.zhcndoc.com/blog/v4-5-security"
---
# Nuxt 安全补丁发布

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

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

```sh
npx nuxt upgrade --dedupe
```

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

::note
如果由于某些原因你无法升级到已修补的版本（例如，你被固定在较旧的发布线），Socket 提供了 [Nuxt 的认证补丁](https://socket.dev/blog/patches-for-nuxt-security-vulnerabilities)，可作为临时措施应用于各个发布线。升级仍然是推荐的修复方式。
::

::warning
如果你已经因为之前的路由规则公告 ([CVE-2026-53721](https://github.com/nuxt/nuxt/security/advisories/GHSA-mm7m-92g8-7m47)) 而升级过，你仍然需要这个版本。下面提到的问题之一是由那个修复本身引入的回归，因此即使使用 4.4.7+ 或 3.21.7+ 也不能保证安全。
::

## 🔍 修复了什么

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

### 通过 server island props 导致的服务端远程代码执行（高）

[GHSA-9473-5f9j-94wq](https://github.com/nuxt/nuxt/security/advisories/GHSA-9473-5f9j-94wq)

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

### 通过 server island props 未授权实例化组件（中）

[GHSA-48hr-524c-v5w3](https://github.com/nuxt/nuxt/security/advisories/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](https://github.com/nuxt/nuxt/security/advisories/GHSA-hxvh-4h3w-prp9)

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

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

### 服务端组件拒绝服务（高）

[GHSA-hxcr-hm88-mpq6](https://github.com/nuxt/nuxt/security/advisories/GHSA-hxcr-hm88-mpq6) 和 [GHSA-9pgf-384g-p7mv](https://github.com/nuxt/nuxt/security/advisories/GHSA-9pgf-384g-p7mv)

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

### 缓存页面上的跨用户 payload 泄露（高）

[GHSA-wm8w-6qjm-cv43](https://github.com/nuxt/nuxt/security/advisories/GHSA-wm8w-6qjm-cv43)，仅 4.x 受影响（`>= 4.4.0`；3.x 分支不受影响）

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

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

### 开发服务器路径泄露（低）

[GHSA-7c4v-fwgw-9rf7](https://github.com/nuxt/nuxt/security/advisories/GHSA-7c4v-fwgw-9rf7)

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

### Nuxt DevTools 远程代码执行（严重，仅开发环境）

[GHSA-279x-mwfv-vcqv](https://github.com/nuxt/nuxt/security/advisories/GHSA-279x-mwfv-vcqv)，已在 `@nuxt/devtools@3.3.1` 中修复

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

## 💚 感谢

非常感谢这些负责任地报告这些问题的研究人员：[Pig-Tail](https://github.com/Pig-Tail)、[sec-reex](https://github.com/sec-reex)、[DavidCarliez](https://github.com/DavidCarliez)、[manop55555](https://github.com/manop55555)、[dinhvaren](https://github.com/dinhvaren)、[quantumshiro](https://github.com/quantumshiro)、[Saku0512](https://github.com/Saku0512) 和 [TazmiDev](https://github.com/TazmiDev)。

这些报告是通过 GitHub 的私密安全通告流程提交的，其中一项是通过 HackerOne 上的 [Vercel OSS Bug Bounty program](https://vercel.com/blog/the-vercel-oss-bug-bounty-program-is-now-available) 送达我们的。对于服务器端远程代码执行问题，我们还与 Vercel、Netlify 和 Cloudflare 的团队进行了合作，提前发出通知，以便他们能在这次披露之前部署防护措施。

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


## Sitemap

See the full [sitemap](https://nuxt.zhcndoc.com/sitemap.md) for all pages.
