| 插件名称 | 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”的请求。该漏洞结合了两个失败:
- Nuxt 返回了渲染的 HTML
__nuxt_island3. 审计您的网站以查找妥协的指标(新管理员、已更改的选项、可疑文件)。. - 中间缓存(CDN、反向代理、边缘缓存)使用的响应缓存键未可靠地包含请求属性,因此不同的请求可能映射到同一缓存条目。.
结果是,为一组属性生成的响应可以存储在共享缓存中,并随后提供给请求相同路径但具有不同属性的其他访客。如果属性包含未经正确编码的攻击者控制的值,攻击者可以构造一个请求,其响应被缓存,然后提供给许多访客——经典的缓存中毒,导致广泛的XSS。.
关键技术点:
- 缓存键必须区分用户特定或请求特定的响应。如果不这样,用户将收到为其他人准备的内容。.
- 对于渲染动态片段的SSR端点,缓存键必须包含属性,或者端点必须选择不使用共享缓存(Cache-Control: private / no-store)。.
- XSS发生在不受信任的输入在没有正确转义的情况下到达HTML/JS;共享缓存会放大这种影响。.
针对WordPress + Nuxt前端的现实攻击场景
常见部署:
- WordPress通过REST API提供内容。.
- Nuxt前端执行SSR,通过请求数据和渲染岛屿。
__nuxt_island. - 网站从一个使用CDN的公共域名提供,该CDN缓存来自Nuxt服务器的响应。.
攻击者可能采取的利用步骤:
- 找到一个
__nuxt_island接受通过查询参数或请求体作为属性的攻击者控制输入的端点。. - 构造包含XSS有效负载的属性,该有效负载将在片段中被渲染而不进行转义。.
- 通过CDN发送请求,并导致CDN在共享键下缓存响应。.
- 后续访客收到被污染的HTML,攻击者的脚本在他们的浏览器中执行。.
潜在后果:
- 如果存在cookie,则会发生凭证盗窃。.
- 管理员或编辑访问前端时会发生会话盗窃。.
- 由于插入广告或重定向造成的SEO和品牌损害。.
- 通过注入脚本或重定向分发恶意软件。.
立即采取的步骤(今天该做什么——优先级)
如果您的网站可能受到影响(您使用 Nuxt 前端,或提供 Nuxt 路由的 CDN/代理),请立即按照以下顺序操作:
- 升级 Nuxt 到修补版本(4.4.6 或更高版本)。这是最终修复;与前端团队协调并立即安排升级。.
- 禁用共享缓存 对于
__nuxt_island在 CDN/边缘/代理的端点:配置基于路径的规则以绕过缓存或设置缓存控制到no-store/私密直到您升级。. - 设置源响应头 对于岛屿路由:使用
Cache-Control: private, no-store, max-age=0或s-maxage=0, ,并为您变化的变化头部/ cookie 添加适当的. - 部署 WAF 规则 (或 CDN 边缘过滤)以阻止或监控可疑属性:标记或阻止包含脚本标签或查询/主体中编码脚本模式的请求。.
- 清除缓存和审计日志: 删除任何缓存的岛屿响应,并搜索日志以查找可疑
__nuxt_island包含有效负载的请求,例如tags or external script references to unfamiliar hosts.Always run rules in monitoring mode first, tune them against real traffic, and escalate to blocking only after validating low false-positive rates.
Cache configuration recommendations
- For server-rendered fragments that depend on per-request data (cookies, auth, props), use
Cache-Control: privateorCache-Control: no-store. Shared caches should not store user-specific content. - If you allow caching, ensure the cache key includes any user- or request-specific identifier used by Nuxt props. Many CDNs allow custom cache key composition — include only the minimal, necessary identifiers to avoid cache collisions.
- Use
Vary:headers correctly. If responses depend onCookieorAuthorization, includeVary: Cookiewhere applicable. - Avoid caching raw HTML fragments that contain unescaped user content.
- Regularly sample cached content to check for integrity and absence of injected scripts.
Detecting if you’ve been hit (indicators of compromise)
- Unexpected inline scripts or external JS from unfamiliar hosts.
- User reports of redirects, popups, or strange behavior on Nuxt-served pages.
- CDN edge logs showing
__nuxt_islandrequests with unusual query strings or bodies followed by many cached GET responses. - Traffic spikes to island paths with new inline scripts.
- Security scanners/site-monitoring alerts flagging injected scripts.
Investigation steps:
- For server-rendered fragments that depend on per-request data (cookies, auth, props), use