保护香港网站免受 Nuxt XSS(CVE202646342)

Npm nuxt 中的跨站脚本攻击(XSS)
插件名称 nuxt
漏洞类型 跨站脚本攻击(XSS)
CVE 编号 CVE-2026-46342
紧急程度
CVE 发布日期 2026-05-20
来源网址 CVE-2026-46342

__nuxt_island 缓存中毒和 XSS — 为什么使用 Nuxt 前端的 WordPress 网站必须立即采取行动

作者:香港安全专家

摘要: Nuxt 修复了一个漏洞,其中 __nuxt_island 端点未将响应绑定到请求属性,允许共享缓存中毒,这可能导致使用 Nuxt SSR 或与共享缓存的 islands 的网站出现存储或反射的跨站脚本 (XSS)。与 Nuxt 前端(无头、混合、JAMstack)配对的 WordPress 后端或位于共享 CDN/代理后面的站点面临风险。本文从香港安全从业者的角度解释了这个问题、现实的利用场景和 WordPress 团队的实际缓解措施。.

CVE: CVE-2026-46342 — 通告: GHSA-g8wj-3cr3-6w7v — 受影响的 nuxt 版本: >= 4.0.0-alpha.1, <= 4.4.5 — 已修补于: 4.4.6


为什么 WordPress 网站所有者应该关心(即使 WordPress 本身不是 Nuxt)

在香港和全球范围内,WordPress 被用于多种交付架构:

  • 传统:WordPress 在服务器端渲染 HTML 并直接提供。.
  • 无头 / 混合:WordPress 是内容后端(REST API / GraphQL),JS 框架(如 Nuxt)使用 SSR、增量再生或“islands”渲染前端。.
  • CDN 和缓存重的设置:网站位于 CDN 和反向代理后,这些代理缓存响应以提高性能。.

如果您的 WordPress 网站使用 Nuxt 前端,或者如果 Nuxt 管理的路由与 WordPress 内容在同一主机名和缓存层上提供,则 Nuxt 缓存中毒问题可能会注入恶意 HTML/JS,浏览器在页面加载时执行。后果包括 XSS、凭证盗窃、广告注入或进一步的妥协。即使是纯 WordPress 网站也应该意识到:共享 CDN 或代理的混合堆栈可能会受到易受攻击的 Nuxt 路由的交叉影响。.


到底出了什么问题:技术解释(简单而详细)

Nuxt 的 island 架构暴露了一个端点: __nuxt_island. 该端点接受携带用于渲染 islands(小 SSR 片段)的“props”的请求。该漏洞结合了两个失败:

  1. Nuxt 返回了渲染的 HTML __nuxt_island 3. 审计您的网站以查找妥协的指标(新管理员、已更改的选项、可疑文件)。.
  2. 中间缓存(CDN、反向代理、边缘缓存)使用的响应缓存键未可靠地包含请求属性,因此不同的请求可能映射到同一缓存条目。.

结果是,为一组属性生成的响应可以存储在共享缓存中,并随后提供给请求相同路径但具有不同属性的其他访客。如果属性包含未经正确编码的攻击者控制的值,攻击者可以构造一个请求,其响应被缓存,然后提供给许多访客——经典的缓存中毒,导致广泛的XSS。.

关键技术点:

  • 缓存键必须区分用户特定或请求特定的响应。如果不这样,用户将收到为其他人准备的内容。.
  • 对于渲染动态片段的SSR端点,缓存键必须包含属性,或者端点必须选择不使用共享缓存(Cache-Control: private / no-store)。.
  • XSS发生在不受信任的输入在没有正确转义的情况下到达HTML/JS;共享缓存会放大这种影响。.

针对WordPress + Nuxt前端的现实攻击场景

常见部署:

  • WordPress通过REST API提供内容。.
  • Nuxt前端执行SSR,通过请求数据和渲染岛屿。 __nuxt_island.
  • 网站从一个使用CDN的公共域名提供,该CDN缓存来自Nuxt服务器的响应。.

攻击者可能采取的利用步骤:

  1. 找到一个 __nuxt_island 接受通过查询参数或请求体作为属性的攻击者控制输入的端点。.
  2. 构造包含XSS有效负载的属性,该有效负载将在片段中被渲染而不进行转义。.
  3. 通过CDN发送请求,并导致CDN在共享键下缓存响应。.
  4. 后续访客收到被污染的HTML,攻击者的脚本在他们的浏览器中执行。.

潜在后果:

  • 如果存在cookie,则会发生凭证盗窃。.
  • 管理员或编辑访问前端时会发生会话盗窃。.
  • 由于插入广告或重定向造成的SEO和品牌损害。.
  • 通过注入脚本或重定向分发恶意软件。.

立即采取的步骤(今天该做什么——优先级)

如果您的网站可能受到影响(您使用 Nuxt 前端,或提供 Nuxt 路由的 CDN/代理),请立即按照以下顺序操作:

  1. 升级 Nuxt 到修补版本(4.4.6 或更高版本)。这是最终修复;与前端团队协调并立即安排升级。.
  2. 禁用共享缓存 对于 __nuxt_island 在 CDN/边缘/代理的端点:配置基于路径的规则以绕过缓存或设置 缓存控制no-store / 私密 直到您升级。.
  3. 设置源响应头 对于岛屿路由:使用 Cache-Control: private, no-store, max-age=0s-maxage=0, ,并为您变化的 变化 头部/ cookie 添加适当的.
  4. 部署 WAF 规则 (或 CDN 边缘过滤)以阻止或监控可疑属性:标记或阻止包含脚本标签或查询/主体中编码脚本模式的请求。.
  5. 清除缓存和审计日志: 删除任何缓存的岛屿响应,并搜索日志以查找可疑 __nuxt_island 包含有效负载的请求,例如 or encoded equivalents.
  6. Review server-side rendering paths that use user input and ensure proper escaping/encoding of props.
  7. Inform stakeholders (developers, hosting, CDN admins) about the vulnerability and actions taken.

WAF strategy & sample rules (practical examples)

Below are conservative example rules to use as a starting point. Test in detection mode before blocking to avoid false positives.

1. Block or challenge requests with script-like content

IF request.path CONTAINS "__nuxt_island"
AND request.method IN ("GET","POST")
AND (
  request.query_string CONTAINS "

2. Reject serialized HTML/JS in props

IF request.path CONTAINS "__nuxt_island"
AND request.params.props MATCHES "(<[^>]+>|%3C[^%]+%3E|javascript:|on[a-z]+=)"
THEN log & block

3. Enforce origin cache-control for island routes

For responses to __nuxt_island, set:

  • Cache-Control: private, no-store, max-age=0
  • Surrogate-Control: no-store (for CDNs that honor it)

4. Rate-limit suspicious island requests

IF request.path CONTAINS "__nuxt_island"
AND requests_from_ip > 10 per minute
THEN rate-limit or block

5. Monitor for inline scripts in cached responses

Alert on edge logs where responses for island routes include inline