Node.js Brotli 解码器越界写入漏洞(Node2Shell CVE-2026-111497) 通告
新华三主动安全
2026年10月28日 16:33
北京
去阅读
漏洞综述
01
漏洞背景
Brotli 是 Google 开发的开源无损压缩算法与数据格式,广泛用于 HTTP 内容压缩,并被 Node.js、Python、Bun、Envoy、Istio 等运行时或软件集成。
近日,新华三盾山实验室监测到 Google Brotli 解码器存在越界写入漏洞(CVE-2026-111497,亦称 Node2Shell)。Google 与 Node.js 等项目已发布修复。该漏洞影响使用未修复 Brotli 解码器处理不可信数据的应用,风险可能涉及 HTTP 请求体、HTTP 响应及其他压缩数据输入。
漏洞详情
漏洞位于 Brotli 解码器 c/dec/decode.c 的 DecodeBlockTypeAndLength() 相关逻辑。未修复实现未正确检查非法块类型切换的返回状态(CWE-252),将应终止解码的格式错误视为暂时需要更多输入,导致流式解码器继续向内部 8 字节缓冲区追加数据,触发越界写入(CWE-787)并破坏相邻解码器状态内存。
利用前提是应用将攻击者可控的 Brotli 数据送入受影响的解码路径。远程未认证攻击者成功利用后,可能造成进程崩溃、敏感内存数据泄露,或以受影响进程权限执行任意代码。风险既可能来自启用 Brotli 请求体解码的服务端,也可能来自接收并解码恶意压缩响应的客户端;实际可利用性取决于应用解码路径、运行环境与防护机制。
Imperva 已在官方 Node.js 24.22.0 Docker 镜像(Linux arm64)的特定应用配置中演示远程代码执行,并确认修复版 24.22.1 拒绝相同输入。
影响范围
02
下表列出已确认的影响范围和对应修复版本,也可选择相应分支更新的修复版本。厂商回补补丁的软件包,应结合对应安全公告及实际构建号判断。
| 组件/分支 | 受影响版本或条件 | 修复版本及说明 |
|---|---|---|
| Google Brotli | 1.0.3 ≤ 版本 < 1.0.10 1.1.0 ≤ 版本 < 1.1.1 1.2.0 ≤ 版本 < 1.2.1 | 对应分支升级至 1.0.10、1.1.1、1.2.1 或更新修复版 |
| Node.js | 22.x:低于 22.23.4 24.x:低于 24.22.1 26.x:低于 26.12.1 | 22.x → 22.23.4 24.x → 24.22.1 26.x → 26.12.1 |
| Node.js EOL 分支 | 已结束支持且捆绑受影响 Brotli 的版本,如 25.x、20.x 等 | 官方不再提供常规安全更新,迁移至受支持的已修复版本。 |
| Bun | 1.0.21 ≤ 版本 < 1.4.4 | 1.4.4;旧版编译的独立可执行文件需重新构建。 |
| Python brotli | 包含受影响 Brotli、且低于 1.2.1 的构建 | 1.2.1 或更新修复版。 |
| Python brotlicffi | 包含受影响 libbrotli、且低于 1.2.1.0 的构建 | 1.2.1.0 或更新修复版。 |
| Envoy | 公告明确列出:1.39.2、1.38.5、1.37.7、1.36.11;需配置 Brotli 解压器 | 1.40.0、1.39.3、1.38.6、1.37.8、1.36.12,按分支选择。 |
| Istio | 1.31.0~1.31.1 1.30.0~1.30.5 1.29.0~1.29.8 需启用 Brotli 解压 | 对应升级至 1.31.2、1.30.6、1.29.9;1.29 已结束支持,建议迁移至受支持分支。 |
| .NET | 8.x:低于 8.0.33 9.x:低于 9.0.22 10.x:低于 10.0.14 11 预览版:低于 11.0.0-rc.3.26522.148 | 对应修复版本: 8.0.33 9.0.22 10.0.14 11.0.0-rc.3.26522.148 具体软件包以微软公告为准。 |
| Dynatrace OneAgent | 未安装厂商对应安全更新、包含受影响组件的构建 | 厂商已为 1.345、1.347 等多个分支发布更新;安装所在分支的修复构建。 |
其他软件:捆绑或链接未修复 Brotli 的 curl/libcurl,以及 Debian、Ubuntu、RHEL、Alpine 等发行版软件包,也应核查实际依赖与补丁状态。仅提供 Brotli 压缩功能不构成本漏洞的解码触发条件。
严重等级
03
| 威胁等级 | 高危 |
| 影响程度 | 广泛(涉及集成受影响Brotli 解码器的多个软件生态) |
| 利用价值 | 高 |
| 利用难度 | 中 |
| 漏洞评分 | CVSS v4.0 9.2 |
处置方法
04
官方补丁
建议依据第 2 章对应组件及分支,尽快升级至已修复版本或更新的受支持版本,并安装操作系统、软件包及镜像厂商提供的相关安全更新。使用已结束支持的 Node.js 分支时,应迁移至受支持的已修复版本。
同步更新容器镜像和自带运行时的程序并重新部署。使用旧版 Bun 编译的独立可执行文件,以及 .NET 自包含或 NativeAOT 应用,应使用修复后的运行时或工具链重新构建、发布与部署。升级后重启相关进程,核对实际运行版本及内置组件状态。
官方下载:
- https://nodejs.org/en/download
- https://github.com/google/brotli/releases
- https://pypi.org/project/brotli
- https://pypi.org/project/brotlicffi
- https://dotnet.microsoft.com/download/dotnet
缓解措施
- 服务端:在任何 Brotli 解码发生前,于反向代理、负载均衡或应用中间件拒绝 Content-Encoding 编码列表包含 br 的入站请求;匹配应不区分大小写,并覆盖多重编码场景。需核查过滤点与实际解码操作的先后顺序。
- 客户端:在现有 HTTP 客户端配置中禁用 Brotli 自动响应解码,或在解码前拒绝相应压缩响应。移除 Accept-Encoding 中的 br 可减少协商使用,但不能替代解码侧限制,恶意服务端仍可能返回 Brotli 数据。
- 直接解码场景:在完成升级前,避免将不可信数据交给受影响的 Brotli 解码 API;已配置 Brotli 解压器的代理或服务网格,可临时停用该解压功能。临时措施应验证业务兼容性,并尽快通过安全更新完成修复。
参考链接
05
[1]https://github.com/google/brotli/releases
[2]https://nodejs.org/en/blog/vulnerability/october-2026-security-releases
[3]https://pypi.org/project/brotli/
[4]https://pypi.org/project/brotlicffi/
[5]https://github.com/dotnet/runtime/security/advisories/GHSA-p3jp-9v83-76w9
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论