| 插件名稱 | nuxt |
|---|---|
| 漏洞類型 | 跨站腳本攻擊 (XSS) |
| CVE 編號 | CVE-2026-46342 |
| 緊急程度 | 低 |
| CVE 發布日期 | 2026-05-20 |
| 來源 URL | 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_island請求。. - 中介快取(CDN、反向代理、邊緣快取)使用的回應快取鍵未可靠地包含請求屬性,因此不同的請求可能映射到相同的快取條目。.
因此,為一組屬性生成的回應可能會存儲在共享快取中,然後提供給其他請求相同路徑但具有不同屬性的訪客。如果屬性包含未經正確編碼的攻擊者控制的值,攻擊者可以構造一個請求,其回應被快取,然後提供給許多訪客——經典的快取中毒使得廣泛的 XSS 成為可能。.
主要技術要點:
- 快取鍵必須區分用戶特定或請求特定的回應。如果不這樣做,用戶將收到為其他人準備的內容。.
- 對於渲染動態片段的 SSR 端點,快取鍵必須包含屬性,或者端點必須選擇不使用共享快取(Cache-Control: private / no-store)。.
- 當不受信任的輸入在沒有正確轉義的情況下到達 HTML/JS 時,就會發生 XSS;共享快取會放大這一效果。.
針對 WordPress + Nuxt 前端的現實攻擊場景
常見部署:
- WordPress 通過 REST API 提供內容。.
- Nuxt 前端執行 SSR,通過請求數據和渲染島嶼來進行
__nuxt_island. - 網站從使用 CDN 的公共域提供,該 CDN 快取來自 Nuxt 伺服器的回應。.
攻擊者可能採取的利用步驟:
- 找到一個
__nuxt_island接受攻擊者控制的輸入的端點,通過查詢參數或請求主體作為屬性使用。. - 構造包含 XSS 負載的屬性,該負載將在片段中渲染而不進行轉義。.
- 通過 CDN 發送請求,並使 CDN 在共享鍵下快取回應。.
- 隨後的訪客收到被毒化的 HTML,攻擊者的腳本在他們的瀏覽器中執行。.
潛在後果:
- 如果存在 cookies,則會發生憑證盜竊。.
- 管理員或編輯訪問前端時會發生會話盜竊。.
- 由於插入廣告或重定向造成的 SEO 和品牌損害。.
- 通過注入腳本或重定向分發惡意軟體。.
立即步驟(今天要做的事 — 優先順序)
如果您的網站可能受到影響(您使用 Nuxt 前端,或提供 Nuxt 路由的 CDN/代理),請立即遵循此順序:
- 升級 Nuxt 到修補版本(4.4.6 或更高)。這是最終修復;與前端團隊協調並立即安排升級。.
- 禁用共享緩存 為
__nuxt_island在 CDN/邊緣/代理的端點:配置基於路徑的規則以繞過緩存或設置快取控制到no-store/私人直到您升級。. - 設置來源響應標頭 對於島嶼路由:使用
Cache-Control: private, no-store, max-age=0或s-maxage=0, ,並添加適當的Vary標頭以便於您變更的標頭/餅乾。. - 部署 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