資安指南

Brotli 漏洞 CVE-2026-111497(Node2Shell):如何檢查 Node.js、Python 與 .NET,以及需要更新什麼

CVE-2026-111497 是 Brotli 解碼器的越界寫入漏洞,惡意構造的壓縮資料可能破壞記憶體。受影響的是 Brotli 1.0.3–1.0.9、1.1.0 與 1.2.0,而 Node.js、Bun、Python Brotli 套件、.NET 等都內建了副本。本文說明檢查方法、修補版本,以及為何只更新作業系統可能無法修補。

發布於 2026-10-27 更新於 2026-10-27 最後核實 2026-10-27 閱讀時間 6 分鐘
本頁內容

本文適合:在 Node.js、Bun、Python 或 .NET 上執行網站服務、API、爬蟲或批次作業的開發者與維運人員。本文依據 Google 的 Brotli 專案、Node.js、Microsoft、PyPI、JPCERT/CC 以及美國政府來源的公開資訊撰寫,不涉及攻擊步驟或攻擊程式碼。

發展中:隨著更多資訊公布,本頁將持續更新

截至 2026 年 10 月 26 日 23:00 UTC

尚不清楚

  • 是否遭利用(沒有第一手來源回報)
  • NVD 本身的評估(等待分析)
  • 受影響產品的完整清單
  • 部分 Linux 發行版(較舊版本尚未評估)

Google 於 10 月 21 日(美國時間)發布修補,Node.js 於同一天發布,Microsoft 於 10 月 25 日(美國時間)發布。JPCERT/CC 於 10 月 26 日發布警示。CISA 的 KEV 目錄未收錄此漏洞。更多廠商仍陸續發布修補,本頁將隨之更新。

今天要做的事

1

確認是否會解壓縮來自外部的 Brotli 資料

例如:會解壓縮以 Content-Encoding: br 送來之請求的網站伺服器、會自動解壓縮外部網站回應的 HTTP 用戶端,以及會解壓縮使用者上傳檔案的程式碼。若符合其中任何一項,請將其視為緊急事項處理(本站看法)。

2

檢查執行環境與套件的版本

使用下方「如何檢查是否受影響」中的指令,檢查 Node.js、Bun、Python 套件,以及 .NET 執行階段與 SDK。

3

更新至修補版本

至少更新至下方「修補版本」所列的版本。nodejs.org 的 Node.js 20.x 及更舊版本的官方建置已停止支援,不會獲得修補,請改用 22.x 或更新版本。對於從 Ubuntu 或 Debian 套件安裝的 Node.js,請依照發行版的安全通知處理。

4

重新建置、重新部署並重新啟動

使用修補版本重新建置容器映像檔、以 bun build --compile 製作的執行檔,以及 .NET 自封式或 NativeAOT 應用程式,然後重新部署。也要重新啟動執行中的程序:舊程序仍載入著舊的函式庫。

5

檢查遭入侵的跡象

JPCERT/CC 要求使用者在套用修補的同時檢查是否遭入侵。在會解壓縮外部資料的程序中,留意當機次數增加、陌生的子程序或對外連線(本站建議)。

6

修正鎖定檔與基礎映像檔中的版本釘選

若 package-lock.json、requirements.txt、poetry.lock 或 Dockerfile 的 FROM 行釘選了舊版本,下次建置時會把它帶回來。請將釘選改為修補版本。

修補版本

9.2
CVSS v4.0(Google 的評分)
1.0.3–1.0.9, 1.1.0, 1.2.0
受影響的 Brotli 版本
未收錄
CISA KEV(日本時間 10 月 27 日上午)
無回報
遭利用狀況(第一手來源)
你使用的軟體受影響修補版本來源
Brotli(C 函式庫)1.0.3–1.0.9、1.1.0、1.2.01.0.10、1.1.1、1.2.1Google
Node.js 22.x早於 22.23.422.23.4Node.js
Node.js 24.x早於 24.22.124.22.1Node.js
Node.js 26.x早於 26.12.126.12.1Node.js
Node.js 20.x 及更舊版本(nodejs.org 官方建置)已停止支援無(請改用 22.x 或更新版本)Node.js
Bun1.0.21 以上、早於 1.4.41.4.4Bun
PyPI brotli1.0.3 以上、早於 1.2.11.2.1GitHub Advisory Database
PyPI brotlicffi1.0.3 以上、早於 1.2.1.01.2.1.0GitHub Advisory Database
.NET 8早於 8.0.33執行階段 8.0.33(SDK 8.0.133、8.0.427)Microsoft
.NET 9早於 9.0.22執行階段 9.0.22(SDK 9.0.123、9.0.320)Microsoft
.NET 10早於 10.0.14執行階段 10.0.14(SDK 10.0.114、10.0.403)Microsoft
Envoyv1.39.2、v1.38.5、v1.37.7、v1.36.11v1.40.0、v1.39.3、v1.38.6、v1.37.8、v1.36.12Envoy
PHP Windows 建置重新建置前的 8.5.12、8.4.27、8.3.36、8.2.358.5.12-1、8.4.27-1、8.3.36-1、8.2.35-1PHP

.NET Framework 不受影響(Microsoft)。.NET 11 預覽版也有修補(11.0.0-rc.3.26522.148)。根據 Envoy 的說法,只有設定了 Brotli 解壓縮器的部署才受影響。

Linux 發行版經常在不變更上游版本號的情況下回移修補。例如,Ubuntu 22.04 的 brotli 在「1.0.9-2ubuntu0.1」中完成修補,但版本號仍顯示 1.0.9。對於作業系統套件,請以發行版的安全通知為準,而非只看版本號。

根據 PHP 團隊的說法,PHP Windows 建置在啟用 HTTP 回應自動解壓縮時,會透過 cURL 擴充功能暴露於此漏洞(cURL 預設關閉此功能,但應用程式與 HTTP 用戶端函式庫可能將其開啟)。修補後的建置帶有「-1」後綴;PHP 版本本身不變。

作業系統函式庫(libbrotli)

透過作業系統更新修補。重新啟動使用它的程序

內建於執行環境(Node.js、Bun、.NET)

更新執行環境本身

程式語言套件(brotli、brotlicffi)

在每個虛擬環境中更新

你自己建置的產物(容器、執行檔)

以修補版本重新建置並重新部署

Brotli 副本所在的每個位置都需要各自修補。作業系統更新只能修補作業系統的函式庫。

如何檢查是否受影響

以下指令只會檢查你自己系統上的版本。

1

Node.js

執行 node -v。早於 22.23.4、24.22.1 或 26.12.1 的版本受影響。node -p process.versions.brotli 會顯示內建的 Brotli 版本,但視修補的套用方式,此數字可能不會改變,因此請以 Node.js 版本本身判斷(本站看法)。若使用 Docker,請在映像檔內檢查,例如 docker run --rm --entrypoint node <image> -v。從 Ubuntu 或 Debian 套件安裝的 Node.js 使用系統的 libbrotli,因此請依下方「作業系統函式庫」的說明檢查。

2

Bun

執行 bun --version。早於 1.4.4 的版本受影響。以 bun build --compile 建置的執行檔內含建置時使用的 Bun,在重新建置前都會受影響(Bun 的安全公告)。

3

Python

執行 pip show brotli brotlicffi(或在 python -m pip list 中尋找 Brotli 與 brotlicffi)。早於 1.2.1 的 brotli 與早於 1.2.1.0 的 brotlicffi 受影響。若兩者都未安裝,就沒有需要針對此漏洞修補的 Python 套件。每個虛擬環境與容器都有自己的副本,請逐一檢查。若是從 python3-brotli 等作業系統套件安裝,請以發行版的安全通知為準,而非看版本號。

4

.NET

執行 dotnet --list-runtimes 與 dotnet --list-sdks。Microsoft 表示,若你在 ASP.NET Core 請求解壓縮或 HttpClient 自動回應解壓縮中啟用了 Brotli,或直接呼叫 BrotliStream 或 BrotliDecoder,就會暴露於此漏洞。兩個自動選項預設都未開啟。

5

作業系統函式庫

在 Debian 與 Ubuntu 上使用 dpkg -l 'libbrotli*',在 RHEL 系統上使用 rpm -qa 'brotli*' 'libbrotli*',在 Alpine 上使用 apk list --installed 'brotli*' 檢查已安裝的版本,並與發行版的安全通知比對。Debian 已在 1.0.9-2+deb12u1(DLA-4855-1)修補 Debian 12,在 1.1.0-2+deb13u1(DSA-6582-1)修補 Debian 13。

已揭露的內容

Brotli 解碼器的越界寫入(CVE-2026-111497)
CVE
CVE-2026-111497(GitHub 安全公告 GHSA-9v8h-qqgm-4m35)
類型
Brotli 解碼器(c/dec/decode.c)中的越界寫入(CWE-787)與未檢查的回傳值(CWE-252)
嚴重程度
CVSS v4.0 9.2(Google)。網路攻擊途徑、無須驗證、無須使用者互動、存在攻擊前提條件(AT:P)。Microsoft 依 CVSS v3.1 將 .NET 的問題評為 8.1
影響
解壓縮惡意構造的 Brotli 串流可能破壞相鄰記憶體、洩漏記憶體內容、造成阻斷服務,甚至可能允許任意程式碼執行(Google 在 NVD 上的說明)。對於 .NET,Microsoft 表示可能導致資訊洩漏、阻斷服務或權限提升(未提及程式碼執行)
受影響
Brotli 1.0.3–1.0.9、1.1.0 與 1.2.0,以及內建這些版本的產品
修補
Brotli 1.0.10、1.1.1、1.2.1(2026 年 10 月 21 日,美國時間)
暫時措施
Google 未提供(JPCERT/CC)。Microsoft 表示在能夠更新之前,應避免解壓縮攻擊者可控制的 Brotli 資料

根據 Node.js 的說法,解碼器將格式錯誤資料中無效的區塊切換視為暫時需要更多輸入,而非格式錯誤,因此會持續寫入,超出內部 8 位元組緩衝區的結尾。在 Node.js 中,使用 node:zlib 解壓縮攻擊者提供之 Brotli 資料的應用程式會受影響。Node.js 將此問題評為 High(高)。同一批版本也修補了另外九個漏洞。

根據 Bun 的安全公告,Bun 的 fetch 預設會自動解壓縮 Brotli 回應,因此應用程式所連線的伺服器,或位於未加密連線路徑上的攻擊者,都能提供這類資料。

只更新作業系統可能無法修補

Brotli 以副本形式內建於許多程式中,包括 Node.js、Bun、Python Brotli 套件、.NET 與 Envoy。JPCERT/CC 要求應用程式會解壓縮 Brotli 資料的使用者,查看各廠商的最新資訊以確認影響與修補狀況。Microsoft 也表示,更新共用執行階段並不能修補 NativeAOT 應用程式,必須重新發佈這些應用程式。

遭利用與概念驗證的狀況

截至 10 月 27 日上午(日本時間),Google、Node.js、Microsoft 與 JPCERT/CC 均未回報在野遭利用。CISA 的 KEV 目錄(10 月 26 日版本)未收錄此漏洞。10 月 23 日加入 NVD 的 CISA SSVC 評估將遭利用狀況評為 none(無)、可自動化評為 no(否)、技術影響評為 total(完全)。Microsoft 的 CVSS 將攻擊程式碼成熟度評為 unproven(未經證實)。

第一手來源未提及公開的概念驗證程式碼。一個獨立的解說網站表示,10 月 22 日有 PoC 公開:在標準建置上只會造成當機與有限的記憶體讀取,而在刻意削弱防護的建置上則可達成程式碼執行。該網站也表示,一家資安公司的研究團隊在官方 Node.js 映像檔上達成了程式碼執行,但未公開方法。本站尚未查證上述任何內容,也不提供連結。

Ubuntu 將此問題評為 Medium(中)優先度,而 Google 評為 9.2。對你而言哪一個更重要,取決於你是否會解壓縮從外部收到的資料(本站看法)。

關於主要的 Python HTTP 函式庫

截至 10 月 27 日,requests、urllib3、httpx 與 aiohttp 均未針對此漏洞發布安全公告(本站查看了各儲存庫的安全公告清單)。urllib3、httpx 與 aiohttp 將 brotli 或 brotlicffi 視為選用的額外相依套件,只有安裝其中之一時才會解壓縮 Brotli。需要修補的是同一環境中的 brotli 與 brotlicffi。若 brotli 仍是舊版本,只更新 HTTP 函式庫並沒有幫助。

尚不清楚的事項

項目狀況
在野遭利用第一手來源未回報。未收錄於 KEV
公開的概念驗證程式碼第一手來源未提及。一個獨立網站表示已存在(未查證)
NVD 評估等待分析(僅有 Google 的 9.2)
受影響產品的完整清單仍在增加。瀏覽器與其他產品請查看各廠商的通知
Linux 發行版Ubuntu 20.04 及更舊版本尚未評估

來源

皆於 2026 年 10 月 27 日確認。

  • JPCERT/CC,Brotli 越界寫入漏洞(CVE-2026-111497)警示(JPCERT-AT-2026-0034,2026 年 10 月 26 日,日文)— jpcert.or.jp
  • PHP,「Updated PHP Windows builds for Brotli security fix」(2026 年 10 月 26 日)— php.net
  • Google Brotli 版本 v1.2.1、v1.1.1、v1.0.10(2026 年 10 月 21 日)— v1.2.1 / v1.1.1 / v1.0.10
  • Node.js,「Node.js Security Releases」(2026 年 10 月 21 日)— nodejs.org
  • Microsoft,「Microsoft Security Advisory CVE-2026-111497 | .NET Brotli Decoder Out-of-bounds Write Vulnerability」(2026 年 10 月 25 日)— github.com/dotnet
  • GitHub Advisory Database GHSA-9v8h-qqgm-4m35(PyPI brotli 與 brotlicffi)— github.com
  • PyPI brotli 1.2.1 — pypi.org / brotlicffi 1.2.1.0 — pypi.org
  • Bun,「Bundled brotli decoder has an out-of-bounds write」(GHSA-663w-cv8g-jj2p,2026 年 10 月 23 日)— github.com
  • Envoy,「Out-of-Bounds Write in Brotli Decompressor」(GHSA-3wvj-j6qm-62mr,2026 年 10 月 23 日)— github.com
  • NVD,「CVE-2026-111497」— nvd.nist.gov
  • CISA,「Known Exploited Vulnerabilities Catalog」(10 月 26 日版本未收錄)— cisa.gov
  • Ubuntu,「CVE-2026-111497」— ubuntu.com / Debian,「DLA-4855-1 brotli」— lists.debian.org

更新紀錄

2026-10-27:初版,依據 Google、Node.js、Microsoft、Bun、Envoy、PHP、PyPI、JPCERT/CC、NVD、CISA 的 KEV 目錄、Ubuntu 與 Debian 的公開資訊撰寫。

延伸閱讀

最新快訊

FAQ

Q發生了什麼事?
A

2026 年 10 月 21 日(美國時間),Google 發布 Brotli 1.2.1、1.1.1 與 1.0.10,修補官方 Brotli 函式庫中的越界寫入漏洞 CVE-2026-111497。解壓縮惡意構造的資料可能破壞記憶體,導致當機、記憶體內容外洩,甚至可能導致程式碼執行。Node.js、Bun、Python Brotli 套件、.NET 等已針對各自內建的副本發布修補。

QNode2Shell 與 HTTP2Shell 是什麼?
A

它們是此漏洞的別稱。根據 JPCERT/CC 的說法,因與 Node.js 的揭露有關而被稱為 Node2Shell,又因 Brotli 廣泛用於 HTTP 壓縮而被稱為 HTTP2Shell。兩者都是指 CVE-2026-111497,並非不同的漏洞。

Q我是否受影響?
A

若內建 Brotli 1.0.3–1.0.9、1.1.0 或 1.2.0 的軟體會解壓縮從外部收到的 Brotli 資料,你就受影響。具體包括:各版本線上早於 22.23.4、24.22.1 或 26.12.1 的 Node.js,早於 1.2.1 的 PyPI brotli,早於 1.2.1.0 的 brotlicffi,以及早於 8.0.33、9.0.22 或 10.0.14 的 .NET。Microsoft 表示,ASP.NET Core 與 HttpClient 預設不會自動解壓縮 Brotli,因此 .NET 是否暴露取決於你是否啟用了該功能。

Q我已經安裝了作業系統更新,這樣就夠了嗎?
A

不一定。來自 nodejs.org 的官方 Node.js 建置與 Docker 映像檔、Bun、從 PyPI 安裝的 Python Brotli wheel、.NET 自封式(self-contained)與 NativeAOT 應用程式,以及 Bun 單一檔案執行檔都自帶 Brotli。更新作業系統的 libbrotli 不會改變這些副本。請逐一更新,然後重新建置並重新部署容器映像檔與執行檔。以 Ubuntu 或 Debian 套件安裝的 Node.js 使用系統的 libbrotli,因此更新作業系統即可修補(Ubuntu 與 Debian 安全追蹤頁面)。

Q此漏洞是否正遭利用?
A

截至 10 月 27 日上午(日本時間),沒有第一手來源回報遭利用,CISA 的 KEV 目錄也未收錄。10 月 23 日加入 NVD 的 CISA SSVC 評估將遭利用狀況評為 none(無)。Google、Node.js、JPCERT/CC 與 Microsoft 均未提及公開的概念驗證(PoC)程式碼。一個獨立的解說網站表示已有 PoC 公開;本站尚未查證。

Q我需要更新 requests、urllib3、httpx 或 aiohttp 嗎?
A

截至 10 月 27 日,這些函式庫都沒有針對此漏洞發布安全公告。urllib3、httpx 與 aiohttp 只有在安裝了 brotli 或 brotlicffi 時才會解壓縮 Brotli(requests 使用 urllib3)。需要修補的是同一環境中的 brotli(1.2.1 或更新版本)與 brotlicffi(1.2.1.0 或更新版本)。可用 pip show brotli brotlicffi 檢查。