保護香港網站免受 Nuxt XSS(CVE202646342) 攻擊

Npm nuxt 中的跨站腳本攻擊 (XSS)
插件名稱 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”的請求。該漏洞結合了兩個失敗:

  1. Nuxt 返回的渲染 HTML 為 __nuxt_island 請求。.
  2. 中介快取(CDN、反向代理、邊緣快取)使用的回應快取鍵未可靠地包含請求屬性,因此不同的請求可能映射到相同的快取條目。.

因此,為一組屬性生成的回應可能會存儲在共享快取中,然後提供給其他請求相同路徑但具有不同屬性的訪客。如果屬性包含未經正確編碼的攻擊者控制的值,攻擊者可以構造一個請求,其回應被快取,然後提供給許多訪客——經典的快取中毒使得廣泛的 XSS 成為可能。.

主要技術要點:

  • 快取鍵必須區分用戶特定或請求特定的回應。如果不這樣做,用戶將收到為其他人準備的內容。.
  • 對於渲染動態片段的 SSR 端點,快取鍵必須包含屬性,或者端點必須選擇不使用共享快取(Cache-Control: private / no-store)。.
  • 當不受信任的輸入在沒有正確轉義的情況下到達 HTML/JS 時,就會發生 XSS;共享快取會放大這一效果。.

針對 WordPress + Nuxt 前端的現實攻擊場景

常見部署:

  • WordPress 通過 REST API 提供內容。.
  • Nuxt 前端執行 SSR,通過請求數據和渲染島嶼來進行 __nuxt_island.
  • 網站從使用 CDN 的公共域提供,該 CDN 快取來自 Nuxt 伺服器的回應。.

攻擊者可能採取的利用步驟:

  1. 找到一個 __nuxt_island 接受攻擊者控制的輸入的端點,通過查詢參數或請求主體作為屬性使用。.
  2. 構造包含 XSS 負載的屬性,該負載將在片段中渲染而不進行轉義。.
  3. 通過 CDN 發送請求,並使 CDN 在共享鍵下快取回應。.
  4. 隨後的訪客收到被毒化的 HTML,攻擊者的腳本在他們的瀏覽器中執行。.

潛在後果:

  • 如果存在 cookies,則會發生憑證盜竊。.
  • 管理員或編輯訪問前端時會發生會話盜竊。.
  • 由於插入廣告或重定向造成的 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, ,並添加適當的 Vary 標頭以便於您變更的標頭/餅乾。.
  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