資料中心的機櫃走道
示意圖。Carl Lender 攝,CC BY 2.0,Wikimedia Commons。
資安BrotliCISA KEV

Brotli 解壓縮漏洞 Node2Shell 已遭利用:CISA 10 月 27 日列入 KEV、美國聯邦文職行政機關 11 月 10 日前要依指引處置,Node.js 網站、.NET 程式與部分 Palo Alto 防火牆都要更新

網站傳資料前常先壓縮、收到再解壓縮,傳得比較快;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 壓縮的請求作為暫時措施,但程式主動抓外部網址那條路擋不到。

原文 CISA KEV JSON 資料檔(2026.10.27 版)與 KEV 目錄 CVE-2026-111497 條目,漏洞名稱、列入日期、處理期限、勒索軟體欄取自此處; CISA 警示〈CISA Adds Two Known Exploited Vulnerabilities to Catalog〉(2026-10-27),列入理由、BOD 26-04 的約束對象與對所有組織的建議取自此頁; CVE-2026-111497 紀錄,CVSS 評分、受影響與修補的 Brotli 版本、CISA 利用狀態欄取自此處; google/brotli v1.2.1 發布頁,確認修補版已發布; Node.js 10 月 21 日安全更新公告,漏洞機制、受影響版本線與修補版本取自此頁; Palo Alto Networks 公告,PAN-OS 受影響條件、版本、關閉指令與利用狀態取自此頁; TWCERT/CC 通報(2026-10-22),台灣的通報內容、使用情境與盤點建議取自此頁; ELLIO 部落格(資安公司,第三方),攻擊流量觀測、測試結果、觸發途徑、停止維護版本、版本字串與系統函式庫的提醒取自此頁; broccoli2shell.com(獨立追蹤網站,第三方),名稱由來、Python 套件與鎖定檔、PAN-OS hotfix 提醒、瀏覽器狀態與暫時措施取自此頁。