Brotli 解壓縮漏洞 Node2Shell 已遭利用:CISA 10 月 27 日列入 KEV、美國聯邦文職行政機關 11 月 10 日前要依指引處置,Node.js 網站、.NET 程式與部分 Palo Alto 防火牆都要更新
趨勢新聞2026 年 10 月 28 日
網站傳資料前常先壓縮、收到再解壓縮,傳得比較快;Brotli 就是 Google 開發、許多網站與程式在用的壓縮格式。它的解壓縮程式有漏洞 CVE-2026-111497(CVE 是漏洞的國際統一編號),資安業者叫它「Node2Shell」:程式如果會解壓縮外來的 Brotli 資料,攻擊者不必登入,送一包特製的壓縮資料,就可能讓程式當機、洩漏記憶體裡的資料,甚至執行攻擊者的程式。美國網路安全暨基礎設施安全局(CISA)10 月 27 日(美國時間)把它列入「已遭利用漏洞目錄」(KEV),美國聯邦文職行政機關要在 11 月 10 日前依指引處置。本站的讀法:台灣企業要盤點的包括用 Node.js(可在伺服器或個人電腦執行 JavaScript 的環境)寫的網站後端與應用程式介面(API)、用 .NET(微軟的開發平台)寫的系統、開了特定功能的 Palo Alto 防火牆,以及工程師電腦上的命令列工具;請工程師或維護廠商確認已換成修補版並重新啟動。
從「未見利用」改成「已遭利用」
本站 10 月 27 日報導 .NET 例外更新時,CISA 在 CVE 紀錄上的評估還是「未見利用」。10 月 27 日 CISA 發布警示,說是「根據已有實際利用的證據」(本站譯)新增兩筆 KEV,這是其中一筆;CVE 紀錄上 CISA 的利用狀態欄也改成「active」(已有實際利用)。CISA 沒有說誰在攻擊、打了哪些目標,勒索軟體欄寫「未知」。
公開的攻擊線索來自民間資安公司,以下各為單一來源的說法。ELLIO 10 月 26 日寫,感測器收到一筆針對 Node.js 24.22.0(x86-64)的攻擊請求,傳送方式照抄公開的攻擊程式,接管程式的那一段則是另寫的;ELLIO 用自己的版本能在同款測試機取得控制權,攻擊者那段試了 50 次都沒成功。這說明有人在網路上出手,但沒有確認哪個目標已被接管。據 ELLIO 與追蹤網站 broccoli2shell.com,Imperva 紅隊 10 月 22 日已在官方 Node.js 映像檔上示範遠端執行程式。Palo Alto 的公告則寫,目前不知道自家產品遭惡意利用。
漏洞出在哪
CISA 給的名稱是「Google Brotli 未檢查回傳值漏洞」。Node2Shell 是資安業者用的綽號,早期公開示範的攻擊針對 Node.js;broccoli2shell.com 改叫 Broccoli2Shell,理由是問題在 Brotli 本身,不只 Node.js。Node.js 公告說明,解碼程式遇到一種不合規格的資料,本該直接報錯,卻當成「資料還沒收完」,繼續把收到的位元組塞進一個 8 位元組的內部暫存區,塞滿後就寫到旁邊的記憶體。Google 給的通用漏洞評分(CVSS 4.0,0 到 10 分)是 9.2 分,屬「重大」。受影響的 Brotli 是 1.0.3 以上未滿 1.0.10,以及 1.1.0、1.2.0;各分支修補版是 1.0.10、1.1.1、1.2.1。
我會不會受影響?
- 用 Node.js 寫的網站或 API:22.x、24.x、26.x 低於 22.23.4、24.22.1、26.12.1 的都在範圍內,已停止維護的 20.x、23.x、25.x 不會有修補。據 ELLIO,程式真的去解壓縮 Brotli 資料才會碰到漏洞,例如框架自動解開標示 br 壓縮的請求(Express 5 的 express.json() 就會),或用內建 fetch 抓外部網址、對方回傳 br 壓縮的內容(貼網址自動出現預覽就是這類功能);單純的 node:http 伺服器不會自己解壓縮請求。
- 用 .NET 寫的系統:升到 8.0.33、9.0.22、10.0.14,11 RC2 要升 RC3;自帶執行環境的程式要重新建置、發布,.NET Framework 不受影響。細節見本站 10 月 27 日報導。
- Palo Alto 防火牆:PAN-OS 11.2、12.1、12.2 的 PA 與 VM 系列,同時開了 TLS/SSL 解密(解開加密連線檢查內容)與 Brotli 檢查才受影響;Brotli 檢查從 11.2.4 起才有,11.1、10.2 與管理介面不受影響。原廠陸續推出修補更新(hotfix),要照公告的產品狀態表核對自己分支的版本,broccoli2shell.com 就提醒 11.2.10-h16 沒修這個漏洞、要 h17。裝好前可用
set system setting brotli-encoding disable關掉 Brotli 檢查,再用show system setting brotli確認顯示 Enabled: no。 - Python 與其他軟體:Python 的 Brotli 套件升到 1.2.1、brotlicffi 升到 1.2.1.0,並調高套件的最低版本要求、重新產生鎖定檔(據 broccoli2shell.com)。動態連結系統 Brotli 函式庫的程式,等 Linux 發行版更新後重啟;靜態連結或自帶一份 Brotli 的程式,要更新那份副本並重新建置,使用者則要裝各軟體推出的修補版。
- 一般人的手機與電腦:broccoli2shell.com 把 Chromium 與 Firefox 列為建表前就已修好。本站的讀法:確認瀏覽器已更新到最新版;電腦上若裝了以 Node.js 執行的命令列工具(TWCERT/CC 舉的例子是 Gemini CLI),Node.js 也要一起更新。
期限給誰,台灣企業怎麼做
11 月 10 日的期限依約束性作業指令 BOD 26-04 訂定,只約束美國聯邦文職行政部門機關,要求依原廠指示處置、沒有緩解辦法就停用;CISA 同時「鼓勵所有組織」(本站譯)優先處理 KEV 上的漏洞。台灣電腦網路危機處理暨協調中心(TWCERT/CC)10 月 22 日已發通報,建議盤點伺服器、容器映像檔與使用者電腦上的 Node.js 版本,更新後重啟服務;通報沒有訂期限。
Node.js 這份公告沒有列替代做法,broccoli2shell.com 認為升級執行環境才是完整修法,並提醒更新後要重啟每個程式;容器要用新版映像檔重建再部署,Dockerfile 若寫死 node:24.22.0 就會一直裝回舊版。ELLIO 提醒,修補版 Node.js 用 process.versions.brotli 查仍顯示 1.2.0,官方版本要看 Node.js 本身的版本號;Node.js 若是連結系統 Brotli 的發行版建置,則要看發行版的套件修了沒有。broccoli2shell.com 建議在代理伺服器或網站防火牆(WAF)擋下 br 壓縮的請求作為暫時措施,但程式主動抓外部網址那條路擋不到。