本文面向:在 Node.js、Bun、Python 或 .NET 上运行 Web 服务、API、爬虫或批处理任务的开发者和运维人员。本文基于 Google 的 Brotli 项目、Node.js、Microsoft、PyPI、JPCERT/CC 以及美国政府来源的公开信息撰写,不涉及攻击步骤或利用代码。
持续更新中:随着更多信息发布,本页面将会更新
截至2026年10月26日 UTC 23:00尚不清楚
- 是否被利用(没有一手来源报告)
- NVD 自身的评估(等待分析)
- 受影响产品的完整清单
- 部分 Linux 发行版(旧版本尚未评估)
Google 于10月21日(美国时间)发布了修复,Node.js 于同一天发布,Microsoft 于10月25日(美国时间)发布。JPCERT/CC 于10月26日发布了警报。CISA 的 KEV 目录未收录该漏洞。更多供应商仍在陆续发布修复,本页面将随其发布而更新。
今天要做的事
确认是否解压来自外部的 Brotli 数据
例如:解压以 Content-Encoding: br 发送的请求的 Web 服务器、自动解压外部网站响应的 HTTP 客户端,以及解压用户上传文件的代码。如果符合其中任何一项,请将其作为紧急事项处理(本站观点)。
检查运行时和软件包的版本
使用下文“如何检查是否受影响”中的命令,检查 Node.js、Bun、Python 软件包以及 .NET 运行时和 SDK。
更新到修复版本
至少更新到下文“修复版本”中列出的版本。nodejs.org 的 Node.js 20.x 及更早版本的官方构建已停止支持,不会获得修复,请迁移到 22.x 或更高版本。对于从 Ubuntu 或 Debian 软件包安装的 Node.js,请遵循发行版的安全通知。
重新构建、重新部署并重启
使用修复版本重新构建容器镜像、用 bun build --compile 制作的可执行程序,以及 .NET 自包含或 NativeAOT 应用,然后重新部署。同时也要重启正在运行的进程:旧进程仍会加载旧的库。
检查入侵迹象
JPCERT/CC 要求用户在应用修复的同时检查是否遭到入侵。在解压外部数据的进程中,留意崩溃次数增加、陌生的子进程或对外连接(本站建议)。
修改锁定文件和基础镜像中的版本固定
如果 package-lock.json、requirements.txt、poetry.lock 或 Dockerfile 的 FROM 行固定了旧版本,下次构建时会把它带回来。请将固定版本改为修复版本。
修复版本
| 你使用的软件 | 受影响 | 修复版本 | 来源 |
|---|---|---|---|
| Brotli(C 库) | 1.0.3–1.0.9、1.1.0、1.2.0 | 1.0.10、1.1.1、1.2.1 | |
| Node.js 22.x | 低于 22.23.4 | 22.23.4 | Node.js |
| Node.js 24.x | 低于 24.22.1 | 24.22.1 | Node.js |
| Node.js 26.x | 低于 26.12.1 | 26.12.1 | Node.js |
| Node.js 20.x 及更早版本(nodejs.org 官方构建) | 已停止支持 | 无(请迁移到 22.x 或更高版本) | Node.js |
| Bun | 1.0.21 及以上、低于 1.4.4 | 1.4.4 | Bun |
| PyPI brotli | 1.0.3 及以上、低于 1.2.1 | 1.2.1 | GitHub Advisory Database |
| PyPI brotlicffi | 1.0.3 及以上、低于 1.2.1.0 | 1.2.1.0 | GitHub 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 |
| Envoy | v1.39.2、v1.38.5、v1.37.7、v1.36.11 | v1.40.0、v1.39.3、v1.38.6、v1.37.8、v1.36.12 | Envoy |
| PHP Windows 构建 | 重新构建前的 8.5.12、8.4.27、8.3.36、8.2.35 | 8.5.12-1、8.4.27-1、8.3.36-1、8.2.35-1 | PHP |
.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)
在每个虚拟环境中更新
你自己构建的产物(容器、可执行程序)
用修复版本重新构建并重新部署
如何检查是否受影响
以下命令仅检查你自己系统上的版本。
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,因此请按下文“操作系统库”中的说明检查。
Bun
运行 bun --version。低于 1.4.4 的版本受影响。用 bun build --compile 构建的可执行程序包含构建时所用的 Bun,在重新构建之前一直受影响(Bun 的安全公告)。
Python
运行 pip show brotli brotlicffi(或在 python -m pip list 中查找 Brotli 和 brotlicffi)。低于 1.2.1 的 brotli 和低于 1.2.1.0 的 brotlicffi 受影响。如果两者都未安装,则没有需要针对该漏洞修复的 Python 软件包。每个虚拟环境和容器都有自己的副本,请逐一检查。如果是从 python3-brotli 等操作系统软件包安装的,请以发行版的安全通知为准,而不是看版本号。
.NET
运行 dotnet --list-runtimes 和 dotnet --list-sdks。Microsoft 表示,如果你在 ASP.NET Core 请求解压或 HttpClient 自动响应解压中启用了 Brotli,或直接调用 BrotliStream 或 BrotliDecoder,就会暴露于该漏洞。两个自动选项默认都未开启。
操作系统库
在 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。
已披露的内容
- 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 的公开信息。
延伸阅读
- 决定优先级:决定先修补什么:CVSS、EPSS 与 KEV
- 漏洞公布时:CVE 修复手册
- 依赖项审计:使用 OSV-Scanner 审计依赖项
- 同一周的另一个严重修复:PHP 漏洞 CVE-2026-109618 和 CVE-2026-109619
- 同月的另一个 Python 依赖项更新:eMudhra 证书:更新 pip、certifi 和 uv
- 术语:什么是 RCE(远程代码执行) / 什么是 CVSS