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 漏洞扫描技能。
