top of page

Brotli 漏洞 CVE-2026-111497 已遭利用:Node.js、.NET、Python 服務的修補與盤點指南

Miles Ma
4天前
讀畢需時 5 分鐘

上週才處理完 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 規則,或規劃舊系統升級?👉 與我們聯繫,由專人協助評估。



延伸閱讀



參考資料

留言


bottom of page