CVE-2026-111497 是 Google Brotli 解碼器中的緩衝區溢位。畸形的 Brotli 壓縮輸入可能寫越內部緩衝區。凡把攻擊者可控資料送入受影響解碼器的應用都可能暴露——包括壓縮的 HTTP 請求體、從不信任伺服器拉取的回應,以及壓縮檔案。影響可從崩潰、記憶體洩露到遠端程式碼執行。若僅用 Brotli 壓縮出站資料,本身不等同於暴露於該解碼器缺陷。
Node.js 在 2026 年 10 月 21 日的 22.x/24.x/26.x 安全版中將該問題標為 High。公告稱,無效的 block switch 被當成「臨時需要更多輸入」而非永久格式錯誤,串流解碼器因此持續把位元組追加到 8 位元組內部緩衝。攻擊者若能讓應用用 `node:zlib` 解壓其提供的 Brotli 資料,即可破壞行程記憶體。Node.js 公告感謝 OpenAI Codex Security 的 Khai Tran 與 Sylvie Mayer 報告,以及 mcollina、aduh95 修復。
修復版本(以 Patch the Planet 2026-10-23 覆核為準)
| 專案 | 修復版本 |
|---|---|
| Node.js | 22.23.4、24.22.1、26.12.1(使用仍支援的發行線) |
| Bun | 1.4.4(含 Brotli 1.2.1) |
| Envoy | 1.40.0、1.39.3、1.38.6、1.37.8(1.36.12 含修復,但 1.36 已不支援) |
| Istio | 1.29.9、1.30.6、1.31.2(1.29 已 EOL,宜遷到支援線) |
| Google Brotli(上游) | 1.0.10、1.1.1、1.2.1(依你的庫分支選對應修復版) |
上游 Brotli 1.0.3 至 1.2.0 在受影響範圍;請更新內嵌這些版本的庫與靜態二進位。Envoy 公告(GHSA-3wvj-j6qm-62mr)適用於設定了 Brotli 解壓器的部署。同時檢查同時帶 Chromium 與 Node 的 Electron 類應用、原生繫結(curl/libcurl、Python/Java 封裝),以及解碼 Brotli 的檔案/字型流水線。
臨時緩解
若暫時無法升級,可先停用對不可信資料的 Brotli 解壓,並儘量保留 gzip、deflate 等其他編碼:
- 在任何代理、中介軟體或 body parser 解壓之前,拒絕帶 `Content-Encoding: br` 的請求。
- HTTP 用戶端關閉自動 Brotli 解壓,並在解碼前拒絕 Brotli 回應;僅從 `Accept-Encoding` 去掉 `br` 並不能阻止伺服端仍傳送 Brotli。
- Envoy/Istio 對請求與回應方向均停用 Brotli 解壓過濾器;停用後壓縮位元組仍可能傳到仍脆弱的下游解碼器。
- 暫停處理不可信的 Brotli 檔案,直到解碼器已打補丁。
在 CDN 或來源站關閉 Brotli *回應壓縮*,並不會關掉請求側或用戶端解壓。升級後需重建並重部署釘住舊執行時的映像,重啟所有複本與 worker,並對照廠商修復版核驗正在執行的二進位。
OpenAI 10 月 23 日關於加固前沿模型訓練環境的說明中,提到高算力紅隊發現的開源缺陷經 Patch the Planet 披露,其中包括本 Brotli 問題。訓練隔離故事見 OpenAI 收緊前沿模型訓練環境的隔離。站內另一篇與 Node.js 安全技能相關的筆記見 Qoder 新增 php2shell Defense 與 Node.js Vulnerability Scan 技能。
對於各發行版補丁包,我們暫時還沒有在自有環境逐一複測;如果你有暴露面或升級方面的經驗,可以透過網站底部的站長聯絡方式回饋。相關文章見 OpenAI 訓練環境隔離 與 Qoder Node.js 漏洞掃描技能。
