Node.js 專案於二〇二六年十月二十一日發布安全更新,修復 Google Brotli 解碼器越界寫入漏洞 CVE-2026-111497;其後 Imperva 以 Node2Shell 獨立驗證可在未修補的 Node.js 上執行遠程代碼,資安公司 Aikido 與 The Hacker News 於十月二十三至二十四日進一步指出同一缺陷亦波及 Python 套件、Bun、Envoy 與 Istio 等生態,新加坡網絡安全局並以 CVSS 九點八發出警示。本文已核對 Node.js 官方安全公告、Imperva 威脅研究與公開修補版本清單,來源真實性已驗證。
Node.js/官方:Brotli 解碼漏洞 CVE-2026-111497——Node2Shell 可致遠程代碼執行;Python、Bun、Envoy 等同受波及
Node.js 於二〇二六年十月二十一日為 22.x、24.x、26.x 發布安全版本,最高嚴重度評為 High;其中最受關注的項目是綁定於執行環境的 Brotli 解碼器越界寫入(CVE-2026-111497)。官方說明:畸形壓縮輸入可寫入內部緩衝區末端之外,導致行程記憶體損毀,進而可能造成崩潰、記憶體洩漏或遠程代碼執行。漏洞由 OpenAI Codex Security 的 Khai Tran 與 Sylvie Mayer 回報,修復由 Matteo Collina(mcollina)與 Antoine du Hamel(aduh95)完成。固定版本為 22.23.4、24.22.1、26.12.1。Imperva Red Team 於十月二十二日以 Node2Shell 為名,在官方未修補的 Node.js 24.22.0(Linux arm64)映像上,透過 fetch 取得的 Brotli 回應或 Express/body-parser 解壓的請求主體,獨立驗證可執行攻擊者提供的代碼;同一輸入在 24.22.1 會被拒絕。其後產業跟進顯示,問題根源在 Google Brotli C 函式庫本身,凡捆綁舊版解碼器的執行環境與依賴皆需各自更新——這與同週熱議、但技術棧完全不同的 PHP2Shell 並非同一事件。
一、事件核心:從 Node 安全版到跨生態「HTTP2Shell」
技術細節
據 Node.js 官方公告,漏洞機制在於:無效的 block switch 被當成「暫時需要更多輸入」,而非永久格式錯誤,串流解碼器因而持續把輸入位元組附加到僅八位元組的內部緩衝區,造成越界寫入。攻擊前提是應用程式以 node:zlib 等路徑解壓攻擊者可控的 Brotli 資料;裸 HTTP 伺服器若未配置解壓中介軟體,並不會單純因收到 Content-Encoding: br 就觸發。
Imperva 測試涵蓋 Express 5.0.0–5.3.0 與 body-parser 2.0.0–2.3.0 等會解壓 Brotli 請求主體的路徑,以及內建 fetch() 讀取壓縮回應的路徑;證明並非每次嘗試皆成功,但已足以確立在指定官方映像與應用設定下可達代碼執行。新加坡網絡安全局(CSA)於十月二十三日警示,將該漏洞 CVSS v3.1 評為九點八,呼籲立即升級。Aikido 於十月二十三日發布、二十四日更新的分析,把跨語言與 HTTP 客戶端/代理的影響面概括為「HTTP2Shell」:Python 的 Brotli、brotlicffi 套件(建議分別升至 1.2.1、1.2.1.0 或更新)、Bun 1.4.4、Envoy/Istio 在啟用 Brotli 解壓時的對應修補版,以及原生 libbrotli 1.2.1(舊分支亦有 1.0.10/1.1.1 等修補)均列於公開清單。The Hacker News 十月二十四日綜述強調:因各產品各自捆綁解碼器副本,必須逐一更新;截至報道時尚未見野外大規模利用公開紀錄。Vercel 等於披露當日部署 WAF 規則,但同時提醒防火牆無法覆蓋函式對外 fetch 壓縮回應的路徑,修補執行環境仍屬必要。
二、技術原理:壓縮邊界即攻擊面
Brotli 是 Google 推出的無損壓縮格式,廣泛用於 HTTP 傳輸以縮小 HTML、CSS、JavaScript 等內容。伺服器若接受客戶端上傳的壓縮主體,或客戶端/代理自動解壓帶 br 編碼的回應,解碼器就會處理「對方可控」的位元流。CVE-2026-111497 屬於解碼器狀態機錯誤:本應判定為格式錯誤並中止的情況,卻被當成可繼續讀取,讓額外位元組溢出小型工作緩衝區。
OpenAI 方面公開表示,相關根因早於二月已在 Brotli 原始碼層修復,但當時未以安全漏洞視角發版,導致各捆綁副本長期滯後;正式安全聯動直至十月二十一日起才隨 Node.js 等專案釋出。這解釋了為何「同一 CVE」會在數日內由 Node 擴散到 Python、代理與其他執行環境:不是新發現多個無關洞,而是共用解碼器的供應鏈同步補洞。企業盤點時應同時覆蓋:執行環境版本、容器基底映像、鎖定檔中的壓縮套件,以及 Envoy/Istio 是否開啟 Brotli 解壓過濾器。
三、日常應用場景
1. 開發者與技術團隊
負責 Node/Next.js、Python API 與 CI 映像的團隊,應立即核對生產與建置機上的 Node.js 是否已達 22.23.4/24.22.1/26.12.1(或同線更新版);Node.js 20 已結束生命週期,官方不會為此洞再發修補,須遷移至受支援主線。Python 環境即使業務代碼未直接 import brotli,只要安裝了 Brotli 或 brotlicffi,requests、httpx、aiohttp 等客戶端仍可能自動解壓 br 回應。更新後需重建映像、重啟行程,並以依賴鎖定與映像掃描確認執行中負載已換上修補元件。
2. 企業與隱私敏感行業
金融、醫療、法律與電商後台若以 Node 或 Python 微服務處理對外 API、Webhook 或檔案上傳,壓縮解碼路徑等同額外攻擊入口。資安與平台團隊宜把此事件納入緊急變更:盤點 Express/body-parser 是否啟用 Brotli、對外 fetch/HTTP 客戶端是否自動接受 br,以及邊緣代理(Envoy、Istio)的解壓設定。WAF 可降低部分入站風險,但不能替代執行環境與函式庫升級,尤其是服務主動拉取外部壓縮內容的場景。
3. 一般用戶與內容創作者
一般網站訪客無需自行操作;風險主要落在營運網站、SaaS 與自架應用的一方。若使用託管平台,應確認供應商是否已滾動修補受管執行環境,並了解其 WAF 覆蓋範圍是否包含「函式對外抓取」路徑。自架部落格、店舖後台或中小企 API 若仍運行舊版 Node 容器,屬高優先更新對象。
4. 香港與亞洲市場視角
香港大量中小企與初創以 Node.js、Python 與容器化微服務交付網店、預約與內部工具;CDN/反向代理亦常見啟用壓縮。同週 PHP2Shell 已令全球網站緊急加固,Brotli/Node2Shell 則提醒「壓縮解碼」與「腳本語言執行環境」是兩條並行的供應鏈戰場。對受規管行業而言,除緊急補洞外,更應建立映像來源、依賴鎖定與對外壓縮策略的持續監控,避免下次同類共用函式庫事件再次演變成全公司救火。
四、專業評價與潛在考量
優勢
- 官方修補版本清晰,Node、Bun、Python 套件與主流代理均已有公開固定版可跟進。
- Imperva 等獨立驗證提高「可達遠程代碼執行」的可信度,有助管理層理解優先級。
- 產業在披露後數日內補齊跨生態清單,有利一次性盤點,而非只修 Node。
需要留意的地方
- Node.js 專案評為 High,CSA 以 CVSS 九點八警示、CVE 紀錄另見 CVSS 4.0 約九點二等表述,溝通時宜同時引用官方嚴重度與第三方評分,避免單一標籤誤導資源分配。
- 依賴掃描工具截至十月二十三日仍可能未把 CVE 映射至 PyPI 套件名稱,單靠自動化告警不足,需人手核對套件版本。
- 野外大規模利用截至十月二十四日公開報道仍未確認,但 PoC 方向已公開討論,窗口期不宜假設「無人會打」。
- 與 PHP2Shell 同屬「壓縮/執行環境」熱點,但不應混為同一修補工單:技術棧、CVE 與升級路徑均不同。
結語
CVE-2026-111497 由 Node.js 官方安全版揭開序幕,再經 Node2Shell 驗證與 HTTP 生態擴散報道,已從「單一執行環境高危洞」變成跨語言、跨代理的壓縮解碼供應鏈事件。香港團隊應以官方固定版本為準,同步檢查容器、Python 壓縮套件與邊緣解壓設定,並把對外自動解壓策略納入基線。若需要為網站與雲端工作負載做加固評估、修補節奏與架構檢視,可參考 YSK Limited 的香港雲端遷移與網絡安全服務:https://ysk.hk/services/cloud-security 。
參考來源
- Node.js 官方:Wednesday, October 21, 2026 Security Releases(CVE-2026-111497;固定版 22.23.4/24.22.1/26.12.1)— https://nodejs.org/en/blog/vulnerability/october-2026-security-releases (2026-10-21;已核對漏洞描述、回報/修復歸屬與下載版本)
- Imperva Threat Research:Node2Shell: From Brotli Data to Remote Code Execution — https://www.imperva.com/blog/node2shell-from-brotli-data-to-remote-code-execution/ (2026-10-22;獨立驗證未修補 Node.js 24.22.0 上的代碼執行路徑)
- Aikido:Node2Shell evolves to HTTP2Shell…(含 Python/Bun/Envoy/Istio 修補清單;頁面標註 2026-10-23 發布、2026-10-24 更新)— https://www.aikido.dev/blog/python-packages-vulnerable-node2shell-brotli-cve-2026-111497
- The Hacker News:Brotli Decoder Flaw Behind Node.js RCE Also Affects Bun, Python and Other Widely Used Software — https://thehackernews.com/2026/10/brotli-decoder-flaw-behind-nodejs-rce.html (2026-10-24;跨生態影響綜述)
- Cyber Security Agency of Singapore:Critical Vulnerability in Node.js(AL-2026-154;CVSS v3.1 9.8)— https://www.csa.gov.sg/alerts-and-advisories/alerts/al-2026-154/ (2026-10-23)
- Vercel Knowledge Base:Node.js security advisory: Brotli decoder RCE — https://vercel.com/kb/bulletin/node-js-security-advisory (WAF 與「fetch 壓縮回應仍須修補執行環境」說明)