Brotli 漏洞 CVE-2026-111497 已遭利用:Node.js、.NET、Python 服務的修補與盤點指南
上週才處理完 PHP2Shell,這週輪到另一個藏在「底層元件」裡的漏洞。美國網路安全暨基礎設施安全局(CISA)在 2026 年 10 月 27 日,把 Google Brotli 壓縮函式庫的漏洞 CVE-2026-111497 列入「已知遭利用漏洞(KEV)」清單。Brotli 是網站常用的壓縮格式,被打包在 Node.js、.NET、Python 套件、Envoy 與 Istio 等元件中,很多企業可能根本不知道自己的服務有用到它。
這篇文章從企業 IT 主管與工程團隊的角度整理:哪些元件受影響、要升到哪個版本、什麼情況下才真的會暴露,以及修補完成前可以先做哪些過渡防護。
CVE-2026-111497 是什麼?先看已確認的事實
以下內容整理自 Node.js 官方安全公告、Microsoft .NET 安全公告與 CISA KEV 清單(查核日期:2026-10-28)。
漏洞本質: Brotli 解碼器(解壓縮端)在處理特製的壓縮資料時,會寫入超出內部緩衝區範圍的記憶體(out-of-bounds write)。Node.js 官方說明,攻擊者若能提供讓應用程式以 node:zlib 解壓縮的 Brotli 資料,可能造成程式當機、洩漏記憶體內容,甚至遠端執行程式碼。
嚴重程度: Node.js 官方評為 high;Microsoft 對 .NET 的評分為 CVSS 3.1 的 8.1(High)。Akamai 等資安廠商引用的 CVSS 分數為 9.2(Critical)。
遭利用狀態: CISA 已於 10 月 27 日列入 KEV,要求美國聯邦機關在 11 月 10 日前完成處置。是否被用於勒索軟體攻擊,CISA 目前標示為「未知」。資安媒體也報導已有公開的概念驗證程式(PoC)與實際的攻擊流量。
時間軸: Node.js 於 10 月 21 日發布安全更新;Microsoft 於 10 月 25 日發布 .NET 安全公告;CISA 於 10 月 27 日列入 KEV。
別名: 資安社群也稱它為 Node2Shell、Broccoli2Shell 或 HTTP2Shell,指的都是同一個 CVE。
受影響元件與修補版本對照
元件 | 修補版本 | 備註 |
|---|---|---|
Google Brotli 函式庫 | 1.0.10、1.1.1、1.2.1 | 受影響範圍為 1.0.3–1.2.0 |
Node.js | 22.23.4、24.22.1、26.12.1 | 20.x、23.x、25.x 已終止支援,不會收到修補 |
.NET 執行環境 | 8.0.33、9.0.22、10.0.14 | .NET Framework 不受影響;NativeAOT 與自含式部署需重新建置 |
Python brotli/brotlicffi | 1.2.1/1.2.1.0 | 需更新套件並重新部署 |
Go andybalholm/brotli | v1.2.7 | 需更新相依套件並重新編譯 |
Envoy、Istio、Bun | 依各專案公告 | 服務網格與 API Gateway 也要納入盤點 |
表格依據 Node.js、Microsoft 官方公告與 Wiz 研究整理。Linux 發行版與其他產品可能以 backport 方式修補,請以各廠商公告為準。
什麼情況下才真的會暴露?
以下為 WeWinCloud 依官方公告整理的分析,非官方說法。
這個漏洞的觸發條件是「應用程式去解壓縮攻擊者可控制的 Brotli 資料」。所以裝了受影響的版本,不一定代表馬上會被攻擊;但要注意,很多框架會「自動」幫你解壓縮:
Node.js 後端 API: Akamai 指出,Express 5 與 body-parser 2 預設會解壓縮帶有 Content-Encoding: br 的請求內容,任何外部用戶端都能送出這種請求。
Node.js 對外呼叫: 內建的 fetch() 會自動解壓縮 Brotli 回應,如果呼叫的外部服務被入侵或是惡意網站,伺服器本身就可能成為目標。
.NET: ASP.NET Core 的請求解壓縮與 HttpClient 的自動解壓縮預設都沒有開啟,只有自行啟用 Brotli 解壓縮或直接使用 BrotliStream 等 API 時才會暴露。
容器與無伺服器環境: 映像檔或 Lambda 部署套件內的 Node.js、Python 版本是打包時就固定的,主機更新不會自動帶到這些地方。
換句話說,最需要優先處理的是「對外開放、用 Node.js 寫的 API 與網站後端」,其次是會去抓外部資料的服務,以及容器化、無伺服器的工作負載。
企業 5 步驟盤點與修補清單
步驟 1:找出所有用到 Node.js、.NET、Python 的對外服務
列出官網後端、API、會員系統、行動 App 的後端與內部工具,標示部署位置(虛擬機、Kubernetes、容器、Lambda 等無伺服器服務)與負責人。前端專案的建置工具不是重點,重點是「在伺服器上執行、會處理外部資料」的服務。
步驟 2:確認實際執行的版本
在執行環境中確認 Node.js 與 .NET 執行環境的版本,並檢查 Python、Go 專案的相依套件鎖定檔(lockfile)。容器映像要看映像內的版本,不是建置主機上的版本。
步驟 3:升級、重新建置並重新部署
Node.js 升到 22.23.4、24.22.1 或 26.12.1 以上;.NET 升到 8.0.33、9.0.22 或 10.0.14 以上;Python 與 Go 套件更新到修補版本。容器映像、自含式部署與 NativeAOT 程式需要重新建置並重新部署,最後確認執行中的程序已載入新版本。仍在 Node.js 20.x 等終止支援版本的服務,應同步規劃升級。
步驟 4:修補完成前的過渡措施
Wiz 與 Microsoft 提出的暫時做法包括:關閉應用程式的 Brotli 解壓縮(例如 body-parser 的 inflate 設為 false、.NET 移除 br 解壓縮設定),或在 WAF、反向代理層拒絕 Content-Encoding: br 的請求。這些措施會影響正常流量,上線前要先測試,而且不能取代升級。
步驟 5:檢查日誌與異常行為
留意 WAF 與應用程式日誌中帶有 Brotli 編碼的異常請求、服務不明原因的當機或重啟,以及主機上的異常程序與對外連線。如果服務在修補前長時間對外開放,建議搭配 EDR 或 MDR 做進一步檢查。
WAF 能幫上什麼忙?
WAF(網站應用程式防火牆)可以在流量進入應用程式前,先擋下帶有 Brotli 編碼的請求內容,為修補爭取時間。不過它有兩個限制:
只能保護進來的請求。 fetch() 抓取外部回應這條路徑不會經過入口的 WAF,仍需靠升級解決。
只保護經過 WAF 的流量。 若主機或容器服務可以被直接連線,攻擊者就能繞過 WAF,建議同時限制來源。
常見問題
我們沒有在程式裡用到 Brotli,也需要處理嗎?
需要確認。Node.js 的 Express 5、body-parser 2 與 fetch() 會自動解壓縮 Brotli,即使程式碼裡沒有寫到 Brotli,也可能暴露。最保險的做法還是升級到修補版本。
網站前面已經有 CDN,還有風險嗎?
要看 CDN 與 WAF 的設定是否會轉送帶 Brotli 編碼的請求內容,以及來源主機是否能被直接連線。CDN 對回應做 Brotli 壓縮與這個漏洞無關,風險在「伺服器端解壓縮外部資料」。
用 .NET Framework 的舊系統受影響嗎?
Microsoft 表示 .NET Framework 不受影響。受影響的是 .NET 8、9、10 與 .NET 11 預覽版,且需啟用 Brotli 解壓縮才會暴露。
結語:底層元件也要列入資產清單
PHP2Shell 和這次的 Brotli 漏洞有個共通點:問題不在企業自己寫的程式,而是在執行環境與共用元件。建議企業把「執行環境版本」與「容器映像內容」也列入資產清單,並建立固定的更新與重新部署流程,下次遇到類似事件時才能快速回應。
WeWinCloud 提供 WAF 網站防火牆、DDoS 防護、EDR / MDR 端點防護與資安顧問、弱點評估等資安防護服務。
需要協助盤點 Node.js、.NET 服務的版本與曝險、調整 WAF 規則,或規劃舊系統升級?👉 與我們聯繫,由專人協助評估。
延伸閱讀
參考資料
Microsoft Security Advisory CVE-2026-111497:.NET Brotli Decoder Out-of-bounds Write(2026-10-25)
Akamai:Inside Node2Shell — A Closer Look at CVE-2026-111497(2026-10-26)
Wiz:Broccoli2Shell — Critical Brotli Decoder Vulnerability(2026-10-25)
Help Net Security:Brotli bug reaches far beyond Node.js(2026-10-27)



留言