原文標題:Inside Node2Shell: A Closer Look at CVE-2026-111497
Akamai 安全研究團隊於 10 月 26 日發布 Node2Shell 技術分析。這是 Node.js 內建 Brotli 解碼器的越界寫入漏洞 CVE-2026-111497,Node.js 於 10 月 21 日發布安全修補。Akamai 引述 CVSS 9.2(重大),同時說明 Node.js 官方將此問題列為高風險。
漏洞發生在不合法的 Brotli 區塊切換被錯誤判定為需要更多輸入,串流解碼器因此繼續寫入僅八位元組的內部緩衝區。攻擊者只要能讓應用程式解壓惡意 Brotli 資料,就可能導致程序崩潰、記憶體內容暴露,甚至遠端程式碼執行;不必先通過驗證。
風險不侷限於直接呼叫 node:zlib 的程式。使用內建 fetch() 取得並自動解壓 Brotli 回應的服務,或採用 Express 5、body-parser 2 且預設 inflate=true 接收 Content-Encoding: br 請求本文的應用,都可能暴露。相對地,單純的 Node.js HTTP 伺服器不會自動解碼收到的 Brotli 請求本文,須看應用實際流程。
Akamai 觀測資料指出,61% 的受測網路執行受影響的 Node.js 版本;這是其遙測範圍內的觀察,不能直接推算所有網際網路主機的比例。
受影響版本為 Node.js 26.x 低於 26.12.1、24.x 低於 24.22.1、22.x 低於 22.23.4;已停止維護的 25.x、23.x、20.x 與更早分支不提供此修補。企業應檢查容器映像、主機執行檔、第三方服務與 CI/CD 內嵌 Node.js。
維運人員可先確認服務是否處理不可信 Brotli 資料,再依風險優先升級;必要時採用微分段限制流量及橫向移動。若業務不需接受壓縮請求本文,可將 body-parser 的 inflate 設為 false,使這類請求以 HTTP 415 拒絕。
官方已確認修補版本為 22.23.4、24.22.1、26.12.1 或更新版本;上游修補將無效區塊切換回傳明確的 BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH 錯誤。Node.js 安全公告沒有提供能完整取代升級的繞過措施。
目前不能把「可能遠端執行程式碼」解讀成所有受影響部署都已遭利用;實際暴露取決於應用程式是否解壓攻擊者控制的資料。Akamai 提供 Linux 與 Windows 資產查詢範例,建議先以官方版本資訊核對。
發生了什麼事
Akamai 安全研究團隊於 10 月 26 日發布 Node2Shell 技術分析。這是 Node.js 內建 Brotli 解碼器的越界寫入漏洞 CVE-2026-111497,Node.js 於 10 月 21 日發布安全修補。
為什麼重要
風險不侷限於直接呼叫 node:zlib 的程式。使用內建 fetch() 取得並自動解壓 Brotli 回應的服務,或採用 Express 5、body-parser 2 且預設 inflate=true 接收 Content-Encoding: br 請求本文的應用,都可能暴露。
影響哪些人
受影響版本為 Node.js 26.x 低於 26.12.1、24.x 低於 24.22.1、22.x 低於 22.23.4;已停止維護的 25.x、23.x、20.x 與更早分支不提供此修補。企業應檢查容器映像、主機執行檔、第三方服務與 CI/CD 內嵌 Node.js。
已確認與未確認
官方已確認修補版本為 22.23.4、24.22.1、26.12.1 或更新版本;上游修補將無效區塊切換回傳明確的 BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH 錯誤。Node.js 安全公告沒有提供能完整取代升級的繞過措施。