Brotli 解碼器記憶體損壞:
Node.js RCE 只是冰山一角

速讀:5 分鐘掌握重點

為什麼現在很紅:一個壓縮格式的解碼器漏洞,因為每個軟體都內嵌自己的副本,影響範圍從 Node.js 到 Python 到代理伺服器,每個都要各自修補。

一句話結論
Google Brotli 解碼器的記憶體損壞漏洞 CVE-2026-111497(CVSS 4.0 評分 9.2/10,critical)影響版本 1.0.3 到 1.2.0。精心設計的 Brotli 壓縮資料能覆寫緩衝區邊界外的記憶體,造成崩潰、記憶體洩漏或程式碼執行。因為 Brotli 是 C 程式碼且每個軟體內嵌自己的副本,影響範圍橫跨多個生態系統。
他要的是什麼
攻擊者傳送精心設計的 Brotli 壓縮資料(作為 HTTP 回應或上傳的請求 body),觸發記憶體損壞,在特定條件下可能執行程式碼。Imperva 已展示 Node.js 上的可靠利用,但需要多次嘗試且未公開。
你今天做一件事
今天檢查你的 Node.js、Bun、Envoy、Istio、Python Brotli 套件的版本,確認是否已更新到修補版本,並重新啟動服務與重建容器映像檔。若無法立即更新,拒絕 Content-Encoding: br 的請求與回應。 直接去做 →
哪些能信
9 可證明3 推論2 缺口 每個主張都標了等級,缺口是誠實寫出來的。
破口速查
受害端一律去識別化;寫「未公開」代表公開資料查不到。
伺服器服務商
執行 Node.js、Bun、Envoy、Istio,或安裝 Python Brotli/brotlicffi 套件的系統
網路服務商
網際網路
漏洞出現的地方
解碼不受信任的 Brotli 壓縮資料時(HTTP 回應、上傳的請求 body、代理轉發的流量)
馬上自我檢測
檢查 Node.js、Bun、Envoy、Istio、Python Brotli 套件的版本 確認是否有解碼不受信任的 Brotli 資料的路徑 檢視日誌中是否有異常崩潰或記憶體錯誤
漏洞修補方式
更新到修補版本(Node.js 22.23.4/24.22.1/26.12.1、Bun 1.4.4、Envoy 1.40.0 等、Python Brotli 1.2.1) 若無法立即更新,拒絕 Content-Encoding: br 的請求與回應,或在 Python 移除 Brotli 套件
有 15 分鐘再看:其餘 2 點
  1. 受影響軟體包括 Node.js(22.x、24.x、26.x)、Bun、Envoy、Istio、Python Brotli 與 brotlicffi 套件、cdxgen。Imperva 已在 Node.js 24.22.0 ARM64 Linux 上展示程式碼執行(Node2Shell),但其他軟體尚未被證實可利用,且無實際攻擊報告。
  2. 這個漏洞在 2026 年 2 月 27 日已被修正並提交到 Brotli 原始碼,但當時未被標記為安全問題且未發布新版本,直到 10 月 21 日才統一發布修補。CISA 於 10 月 23 日評估「無利用證據」與「無自動化」。

Google Brotli 解碼器的記憶體損壞漏洞 CVE-2026-111497 影響所有使用這段 C 程式碼的軟體,包括 Node.js、Bun、Python Brotli 與 brotlicffi 套件、Envoy 與 Istio 代理。精心設計的 Brotli 壓縮資料能覆寫緩衝區邊界外的記憶體,造成崩潰、記憶體洩漏或執行攻擊者控制的程式碼。Imperva 已展示在 Node.js 上執行程式碼的利用,但其他軟體尚未被證實可利用。這個漏洞在 2 月已修正但未被標記為安全問題,直到 10 月 21 日才統一發布修補。因為每個軟體都內嵌自己的 Brotli 解碼器副本,每個都必須各自更新。

Google Brotli 解碼器記憶體損壞漏洞(CVE-2026-111497)·2026-02-27 原始修正提交 → 2026-10-21 統一發布修補·全文 10 分鐘
本篇目錄

發生了什麼

2026 年 10 月 24 日,The Hacker News 報導一個影響多個熱門軟體的記憶體損壞漏洞,源自 Google Brotli 解碼器的 C 程式碼。

Brotli 是 Google 開發的壓縮格式,廣泛用於網頁與網路流量的壓縮。這個漏洞(CVE-2026-111497)在解壓縮 Brotli 串流的 C 程式碼中,讓精心設計的壓縮資料能覆寫緩衝區邊界外的記憶體,導致程式崩潰、記憶體洩漏,或在特定條件下執行攻擊者控制的程式碼。

因為這是 C 程式碼的漏洞,且許多軟體都內嵌 Brotli 解碼器的副本,影響範圍橫跨多個生態系統:從 JavaScript 執行環境(Node.js、Bun)到代理伺服器(Envoy、Istio)到 Python 套件(Brotli、brotlicffi)。每個軟體都必須各自更新內嵌的 Brotli 解碼器副本。

哪些軟體受影響

只有在軟體解碼不受信任的 Brotli 資料時才會暴露。以下是受影響軟體與修補版本:

軟體受影響版本修補版本暴露條件
Google Brotli(C 程式庫)1.0.3 到 1.2.01.0.10、1.1.1、1.2.1解碼不受信任的 Brotli 資料
Node.js22.x、24.x、26.x(修補前);20.x 與更舊(已停止維護)22.23.4、24.22.1、26.12.1fetch() 取得 br 回應,或 Express/body-parser 解碼 br 請求 body
Bun1.4.3 與更早1.4.4fetch() 取得 br 回應,或使用 node:zlib
Envoy1.39.2、1.38.5、1.37.7、1.36.111.40.0、1.39.3、1.38.6、1.37.8、1.36.12只有在啟用 Brotli 解壓縮時
Istio1.31.0 到 1.31.1、1.30.0 到 1.30.5、1.29.0 到 1.29.81.31.2、1.30.6、1.29.9只有在啟用 Brotli 解壓縮時
Python Brotli1.2.0 與更早1.2.1只要安裝,HTTP 客戶端(requests、urllib3、httpx、aiohttp)就會自動解碼 br 回應
Python brotlicffi1.2.0.x 與更早1.2.1.0同上
cdxgen獨立二進位檔與映像檔 13.4.0、12.8.8 與更早13.5.0、12.8.9獨立二進位檔或映像檔掃描不受信任的輸入

Node.js 與 Bun:只有在內建的 fetch() 讀取 Content-Encoding: br 的回應時,或請求 body 處理程式碼(Express 5、body-parser 2)解壓縮 Brotli 上傳時才會暴露。一般的 Node.js HTTP 伺服器不會自動解碼請求 body。

Envoy 與 Istio:只有在啟用 Brotli 解壓縮時才會暴露(例如透過 Envoy filter)。若未啟用,漏洞無法被觸發。

Python:風險來自只要安裝 Brotli 或 brotlicffi 套件。一旦安裝,HTTP 客戶端(requests、urllib3、httpx、aiohttp)會自動解碼 Brotli 回應,應用程式不需要在自己的程式碼中 import Brotli 就會暴露。

利用難度與實際風險

Imperva 的 Red Team 已展示可靠的利用程式碼(命名為 Node2Shell),在未修改的 Node.js 24.22.0 ARM64 Linux 上執行攻擊者控制的程式碼,傳送方式包括 fetch() 取得的回應與 Express 請求 body。這個利用需要多次嘗試,尚未公開,且未在其他建置版本上測試。

OpenAI Codex Security 團隊(回報此漏洞的團隊)描述這是「未經認證的遠端程式碼執行」,並列出 Node.js、Bun、Envoy 為受影響軟體。他們的描述指出漏洞雙向作用:

未修補的伺服器接受壓縮輸入時可能被惡意客戶端控制,未修補的客戶端接受壓縮輸入時(例如 "curl --compressed")可能被惡意伺服器控制。

目前無實際攻擊報告。 CISA 於 10 月 23 日評估「無利用證據」與「無自動化」。Red Hat 表示沒有可靠的公開 PoC 能執行程式碼。

為什麼修正在 2 月但修補在 10 月

這個漏洞有不尋常的歷史:關閉漏洞的修正在 2026 年 2 月 27 日已提交到 Brotli 原始碼,但直到 10 月 21 日才有新的 Brotli 版本包含這個修正。

OpenAI 說:「根本原因實際上在 2 月已在 Brotli 原始碼中修正,但當時不知道這會引發安全漏洞,且沒有更新的 Brotli 版本發布。」

這解釋了為什麼修補統一在 10 月 21 日發布:Node.js、Google、以及其他專案在那天同步發布修補版本。

Node.js 感謝 OpenAI Codex Security 的 Khai Tran 與 Sylvie Mayer 回報漏洞,以及維護者 Matteo Collina 與 Antoine du Hamel 的修補。

緩解措施與暫時解法

最佳做法:更新到修補版本並重新啟動服務與重建容器映像檔。 執行中的程序會保留舊的解碼器直到重新啟動。

若無法立即更新,OpenAI 的披露頁面與 Aikido 資安公司建議:

  • 拒絕 Content-Encoding: br 的請求,在任何代理或解析器解碼 body 之前。
  • 關閉 HTTP 客戶端的自動 Brotli 解碼,並在解碼前拒絕 Brotli 回應。
  • 在 Python 移除 Brotli 與 brotlicffi 套件,讓客戶端回退到 gzip 與 deflate。

單純從 Accept-Encoding header 移除 br 沒有幫助,因為伺服器可以傳送 Brotli 而不管客戶端要求什麼。對 Node.js 來說,沒有公開的暫時解法,只能更新執行環境。

系統套件與相依性掃描器

系統套件的修補時間各異。Debian 於 10 月 23 日修補 Debian 13(trixie)的 brotli 套件(版本 1.1.0-2+deb13u1)。Amazon Linux 2023 截至 10 月 22 日仍列出 brotli 與 Node.js 24 套件為待修補。

相依性掃描器可能尚未標記 Python 套件。CVE 記錄指向 Google Brotli 儲存庫而非 PyPI 套件,且 GitHub Advisory 仍未列出受影響套件(這是 Dependabot 讀取的來源)。PYSEC-2026-4322 與 PYSEC-2026-4323 的 Advisory 條目在 10 月 23 日才新增,所以也要手動檢查安裝的版本。

你可以學到什麼

站在攻擊者的角度:一個壓縮格式的解碼器漏洞,只要能讓目標解碼你控制的 Brotli 資料,就有機會觸發。傳送方式可以是 HTTP 回應(如果目標是客戶端)或上傳的請求 body(如果目標是伺服器)。Imperva 已證明 Node.js 上的利用是可行的,但需要多次嘗試。

lessons本案的 9 個教訓
  1. 01
    內嵌相依性的漏洞需要每個軟體各自修補:Brotli 解碼器是 C 程式碼,每個軟體內嵌自己的副本,所以 Google 修補 Brotli 不會自動修補 Node.js、Bun、Python 套件。
  2. 02
    修正提交不等於安全修補發布:Brotli 的修正在 2 月提交但未被標記為安全問題,直到 10 月才統一發布修補版本,中間有 8 個月的窗口。
  3. 03
    Python 套件的隱性暴露:只要安裝 Brotli 或 brotlicffi,HTTP 客戶端就會自動解碼 br 回應,應用程式不需要明確 import 就會暴露。
  4. 04
    重新啟動服務與重建容器映像檔是修補的必要步驟:更新套件後,執行中的程序仍使用舊的解碼器,必須重新啟動。
  5. 05
    單純拒絕 Accept-Encoding 無效:伺服器可以傳送 Brotli 而不管客戶端要求什麼,必須在解碼前主動拒絕或關閉解碼功能。
  6. 06
    Web 應用防火牆無法涵蓋所有路徑:Vercel 的規則無法涵蓋 function 從其他伺服器 fetch 的回應,只有更新執行環境或程式庫才能關閉這個路徑。
  7. 07
    相依性掃描器可能有延遲:GitHub Advisory 尚未列出受影響的 Python 套件,Dependabot 可能無法標記,要手動檢查版本。
  8. 08
    雙向利用:未修補的伺服器接受壓縮上傳時可能被惡意客戶端控制,未修補的客戶端接受壓縮回應時可能被惡意伺服器控制。
  9. 09
    利用難度影響實際風險:Imperva 展示的利用需要多次嘗試且未公開,目前無實際攻擊報告,但這不代表未來不會出現可靠的利用。
keywords重點學習:最需要學習的 10 個關鍵字10 個
  1. 01
    CVE-2026-111497
    Google Brotli 解碼器記憶體損壞漏洞,CVSS 4.0 評分 9.2(critical)。
  2. 02
    Brotli
    Google 開發的壓縮格式,廣泛用於網頁與網路流量,這次漏洞在解碼 Brotli 串流的 C 程式碼中。
  3. 03
    記憶體損壞(Memory Corruption)
    精心設計的 Brotli 資料能覆寫緩衝區邊界外的記憶體,造成崩潰、記憶體洩漏或程式碼執行。
  4. 04
    Node2Shell
    Imperva 展示的 Node.js 利用程式碼,在 ARM64 Linux 上執行攻擊者控制的程式碼,但需要多次嘗試且未公開。
  5. 05
    Content-Encoding: br
    HTTP header 表示內容使用 Brotli 壓縮,這是漏洞的觸發路徑之一。
  6. 06
    內嵌相依性(Embedded Dependency)
    每個軟體內嵌自己的 Brotli 解碼器副本,所以每個都必須各自更新,不能依賴 Google 修補。
  7. 07
    Python 隱性暴露
    只要安裝 Brotli 或 brotlicffi 套件,HTTP 客戶端就會自動解碼 br 回應,應用程式不需要明確 import。
  8. 08
    OpenAI Codex Security
    回報此漏洞的團隊,描述這是雙向的未經認證遠端程式碼執行。
  9. 09
    雙向利用
    未修補的伺服器可能被惡意客戶端控制,未修補的客戶端可能被惡意伺服器控制,取決於誰解碼不受信任的 Brotli 資料。
  10. 10
    修正與修補的時間差
    Brotli 的修正在 2 月提交但未被標記為安全問題,直到 10 月才統一發布修補版本,中間有 8 個月窗口。

下面的步驟全部唯讀,做完你會知道你的系統是否受影響、是否已修補、是否需要重新啟動。

try today今天就可以來試試約 20 分鐘

全部唯讀,不改任何設定;做完你會知道自己有沒有同樣的破口。

  1. 檢查 Node.js 版本
    node --version
    看到什麼代表什麼:修補版本:22.23.4、24.22.1、26.12.1 或更新。若版本較舊且在受影響範圍(22.x、24.x、26.x),需要更新。20.x 與更舊版本已停止維護。
  2. 檢查 Bun 版本
    bun --version
    看到什麼代表什麼:修補版本:1.4.4 或更新。若版本是 1.4.3 或更早,需要更新。
  3. 檢查 Python Brotli 套件版本
    pip show Brotli | grep Version
    pip show brotlicffi | grep Version
    看到什麼代表什麼:修補版本:Brotli 1.2.1 或 brotlicffi 1.2.1.0。若版本較舊或未安裝,檢查 HTTP 客戶端是否會自動解碼 br 回應。
  4. 檢查 Envoy 版本
    envoy --version
    看到什麼代表什麼:修補版本:1.40.0、1.39.3、1.38.6、1.37.8、1.36.12。只有在啟用 Brotli 解壓縮時才受影響。
  5. 檢查 Istio 版本
    istioctl version
    看到什麼代表什麼:修補版本:1.31.2、1.30.6、1.29.9。只有在啟用 Brotli 解壓縮時才受影響。
  6. 確認服務是否已重新啟動
    systemctl status <服務名稱>
    ps aux | grep node
    看到什麼代表什麼:更新套件後必須重新啟動服務與重建容器映像檔,因為執行中的程序保留舊的解碼器。檢查程序啟動時間是否在更新之後。
  7. 若無法立即更新,在 Python 移除 Brotli 套件
    pip uninstall Brotli brotlicffi
    看到什麼代表什麼:移除後 HTTP 客戶端會回退到 gzip 與 deflate。這是暫時解法,仍需儘快更新。

如果你使用 Node.js、Bun、Python Brotli 套件或 Envoy/Istio,今天就檢查版本並更新。更新後記得重新啟動服務與重建容器映像檔。

這篇提到的項目要花多少錢

更新與重新啟動的成本主要是人力時間與服務中斷。

costBrotli 漏洞修補成本
項目用量單價期間US$NT$舉證
更新 Node.js 到修補版本
估:包含測試與部署;Node.js 更新本身免費
約 0.5 人日內部工時或顧問日費 NT$20,000–35,000(估)一次性429.6913,750本站假設值
更新 Bun 到修補版本
估:包含測試與部署;Bun 更新本身免費
約 0.25 人日內部工時或顧問日費 NT$20,000–35,000(估)一次性214.846,875本站假設值
更新 Python Brotli 套件
估:pip install --upgrade Brotli brotlicffi 並測試
約 0.25 人日內部工時或顧問日費 NT$20,000–35,000(估)一次性214.846,875本站假設值
更新 Envoy/Istio 與重建容器映像檔
估:包含重建映像檔、測試與部署
約 1 人日內部工時或顧問日費 NT$20,000–35,000(估)一次性859.3827,500本站假設值
重新啟動生產服務與監控
估:協調重新啟動時間、執行重啟、監控服務恢復
約 0.5 人日內部工時或顧問日費 NT$20,000–35,000(估)一次性429.6913,750本站假設值
服務中斷成本
若需要停機維護,服務中斷的成本取決於業務規模與 SLA
——————
合計(僅可證明列)0.000
匯率假設 1 USD ≈ NT$32。單價為公開牌價或帳單實付,來源:本站人力工時假設。「舉證」欄標明每筆損失的證據來源與等級( 可證明 推論 缺口)。

總計約 2.5 人日,主要成本在協調更新與重新啟動。服務中斷成本取決於業務規模與是否能做到零停機更新。


來源:本文整理自 The Hacker News 於 2026 年 10 月 24 日發布的報導,依據 Imperva 研究與 OpenAI Codex Security 披露。原文連結

想看全部細節?

環境背景、時間線、攻擊鏈對照 ATT&CK、關鍵證據、根因、處置與檢討都在完整版,約 10 分鐘。

來源

本文為公開報導與官方公告的整理與拆解,非第一手鑑識;證據等級依來源可信度標註。

本文由 AI 團隊協助研究與撰寫,經隱私與事實檢查後發布;證據等級依來源可信度標註。

看完的心情
ai prompt把這篇的切入點帶回你的環境

複製下面這段,貼給你在用的 AI 工具(Claude Code、Cursor、Copilot、ChatGPT 都可以)。它會用本篇的破口位置、自我檢測與學習重點,對你的專案或環境做一次資安掃描,列出潛在問題與建議的調整或加強方式。

預設是唯讀:只發現問題、提出建議,不會改你任何檔案或設定。

§
對應課程模組

M2 Web 應用安全 · 想在自己的環境做一次同樣的盤點,從 自我盤點 開始。

newsletter
下一篇拆解直接寄到信箱

每篇新文章一封:三點摘要、關鍵字定義、今天能做的一件事。或先 加入會員 記錄你完成的任務。