不止 Node.js!Brotli RCE(CVE-2026-111497)影响范围说明
原创 微步情报局 2026-10-29 14:32 北京

点击查看漏洞详情
漏洞概况
CVE-2026-111497 是 Google Brotli C 解码器中的越界写漏洞(CVSS 4.0 9.2)。Brotli 解码器在处理畸形 Brotli 输入数据时,会在解码过程中触发越界写入,成功利用可能导致拒绝服务、进程内存读取和远程代码执行。
Google Brotli 受影响版本为 1.0.3–1.0.9、1.1.0 和 1.2.0,其修复代码于 2026 年 2 月进入 google/brotli 仓库。Google 于 10 月 21 日发布修复版本 1.0.10、1.1.1 和 1.2.1,该漏洞同日随 Node.js 安全更新被广泛披露。
Brotli 是常见的压缩实现,HTTP 流量里的 br 编码会交给解码器,部分字体和 Parquet 文件同样会调用它。Node.js、Bun、Python 软件包、.NET、代理与防火墙、开发工具以及文件处理软件,往往各自编译或链接一份 C 解码器。缺陷位于这份被广泛集成的上游库,各产品里的副本彼此独立,升级其中一款,无法修复其余产品中的解码器,许多下游产品仍带着未修复副本。
影响范围
1. 已发布修复版本的产品
产品 | 修复版本 | 默认配置下是否自动解压 |
|---|---|---|
Node.js 22 / 24 / 26 | 22.23.4 / 24.22.1 / 26.12.1 | 客户端 |
Bun | 1.4.4 | 客户端 |
PyPI | 1.2.1 / 1.2.1.0 | 环境里装了其中之一后,调用常见 HTTP 客户端方法会自动解压 |
Envoy | 1.40.0 / 1.39.3 / 1.38.6 / 1.37.8 / 1.36.12 | 不会 (需配置) |
Istio | 1.31.2 / 1.30.6 / 1.29.9 | 不会 (需配置) |
.NET 8 / 9 / 10 / 11 | 8.0.33 / 9.0.22 / 10.0.14 / 11 第 3 个候选发布版(RC3) | 不会 (请求解压与 HttpClient 自动解压默认关闭) |
PAN-OS | 以 Palo Alto 通告热修复表为准 | 不会 (Brotli 流量检查默认关闭;11.2.3 及更早不支持) |
PowerShell 7 | 7.4.22 / 7.5.13 / 7.6.9 | 对不受控站点使用 |
PHP 官方 Windows 包 | 8.5.12-1 / 8.4.27-1 / 8.3.36-1 / 8.2.35-1(Brotli 1.2.1) | 不会 (cURL 自动解压默认关闭) |
Visual Studio | 2019 16.11.61;2022 17.14.43;2026 18.11.2 | 取决于安装的组件 |
Prisma Cloud Transporter Client | 0.2.9 | 会 |
注:“默认配置下是否自动解压”指在常见默认配置下,是否会自动解压不可信的 Brotli 数据。
2. 尚未发布修复版本的产品
截至 2026-10-29,这些产品尚无包含修复的正式版本,修复前不要用来处理不可信的输入。
产品 | 现状 | 不可信输入 |
|---|---|---|
DuckDB | 最新正式版 2.0.0 内置未修复的 Brotli 1.1.0 | Brotli 压缩的 Parquet |
Apache Arrow | 最新正式版 26.0.0 的打包构建使用 Brotli 1.0.9;链接已修复系统库的构建不受影响 | Brotli 压缩的 Parquet / Arrow IPC |
google/woff2 | 10 月 28 日已合入 Brotli 1.2.1,但尚无新正式版;旧源码随附 1.0.3,CMake 构建可使用系统库 | WOFF2 字体 |
公开扫描名单(Semgrep、broccoli2shell)依据的是软件中含有受影响版本的的 decode.c。可视为排查线索,不等同当前应用可被远程利用。
不可信数据如何进入解码器
本漏洞在进程对不可信数据执行 Brotli 解压时触发,常见情况可分为以下场景:
1. 应用作为 HTTP 客户端
应用作为 HTTP 客户端访问外部资源,响应头为 Content-Encoding: br 时解压响应:
Node.js: 内置
fetch()、axios、got 默认解压。Bun:
fetch默认解压响应;node:zlib的 Brotli 解压方法、DecompressionStream("brotli")在显式调用时解压。Python: 装了
Brotli或brotlicffi后,urllib3、requests、httpx、aiohttp 默认解压,即使业务代码没有import brotli。.NET HttpClient: 打开
AutomaticDecompression的Brotli或All才会解压。默认关闭。PHP 官方 Windows 包: cURL 自动解压默认关闭,应用或客户端库可以打开。
PowerShell 7: 对不受控站点使用
Invoke-WebRequest/Invoke-RestMethod时会解压。
2. 应用作为 HTTP 服务端
应用作为 HTTP 服务端,请求头为 Content-Encoding: br 时解压请求体:
Express 5 / body-parser 2:
json()、raw()默认解压;NestJS、Koa + koa-bodyparser 在使用支持 Brotli 的适配器或解析中间件时同样。仅http.createServer不会自动解压;Express 4 自带解析器不支持 Brotli,但另接支持 Brotli 的中间件后仍会解压。Flask: 默认不解压。
ASP.NET Core: 注册
AddRequestDecompression()并调用UseRequestDecompression()后默认支持br。应用默认不启用该中间件。
3. 代理、服务网格、防火墙
反向代理、服务网格或防火墙若对流量做 Brotli 解压,解压发生在这些设备上。
Envoy: 配置了 Brotli 解压器才会解压。
Istio: 启用 Brotli 解压(例如
EnvoyFilter)才会解压。PAN-OS: 同时开启 Brotli 流量检查与 TLS 解密才会解压;默认关闭。
4. 文件工具
升级系统 libbrotli 无法修复程序内部静态链接的 Brotli;动态链接系统库的构建可通过更新系统库修复。正式修复发布前,不要打开或导入来源不可信的这类文件。
DuckDB / Apache Arrow: 读取 Brotli 压缩的 Parquet 时会解压;Arrow 读取含 Brotli 压缩数据的 IPC 文件也会解压。
google/woff2: 解码 WOFF2 时会解压。
5. 开发工具与配套客户端
Visual Studio: 随安装的组件携带 Brotli,以实际安装的组件为准。
Prisma Cloud Transporter Client: 通告写明无需特殊配置。
.NET 运行时: 请求解压、HttpClient 自动解压默认关闭;使用
BrotliStream解压模式 /BrotliDecoder处理输入时会解压。Node.js / Bun / Electron: Electron 内嵌的 Node、已分发的
bun build --compile是另一份副本,升级宿主机无法更新。
修复建议
优先升级会解压不可信 HTTP
br数据的应用。 Node.js 升到 22.23.4 / 24.22.1 / 26.12.1 并重启(细节见上述 Node.js 说明)。Bun 升到 1.4.4;已用bun build --compile生成的文件,用 1.4.4 重新编译。已安装 PyPIBrotli或brotlicffi的 Python 环境,把包升到 1.2.1 / 1.2.1.0。升级后重建容器镜像并重启进程。检查应用是否会把不可信
br数据交给受影响的解码器处理。升级系统库
libbrotlidec,并重启仍加载旧动态库的进程。对于静态链接或内嵌自编译 Brotli C 解码器的程序,需安装该软件的修复版本或重新构建。
正式修复发布前,不要用尚未修复的文件工具打开或导入来源不可信的 Parquet、WOFF2 等文件。
本文转载自微信公众号「微步在线研究响应中心」,查看原文。版权归原作者所有,如有侵权请联系删除。