返回行业动态
算力与基础设施

八字节缓冲区的失守:Brotli 缺陷波及 Node、Python 与 Envoy

Google 公开 CVE-2026-111497:Brotli 解码器越界写入,CVSS 4.0 评 9.2 分,影响 1.0.3 至 1.2.0。缺陷由 OpenAI 红队智能体在测试自家训练环境时发现,Node.js、Bun、Envoy、Istio 与 Python 的 brotli 包均已发修复版本。根因修复早在 2 月已进上游源码却八个月未发版,暴露出 vendored 压缩库的治理盲区。企业须升级后重启进程并重建镜像,Node 20 及更早系列不会获得修复。

来源:Patch the Planet(OpenAI):Brotli 漏洞处置指引原标题:Brotli vulnerability (CVE-2026-111497)查看原文
数据中心冷通道中央悬浮一个薄壁透明容器,内部八格发光方块被赤红色数据流撑破,两侧为成排深色网孔机柜,顶部深灰吊顶上有白色中文标题「八字节缓冲区失守」

图片来源:北京拓实科技原创(AI 生成封面)

发生了什么

Google 于 10 月 16 日预留、10 月 22 日公开 CVE-2026-111497:Brotli 解码器(c/dec/decode.c)存在越界写入,影响 1.0.3 至 1.2.0 全平台版本,CVSS 4.0 评 9.2;上游 10 月 21 日发布 1.0.10、1.1.1、1.2.1 三个修复版本。

机制写在 Node.js 安全公告里:非法的 block switch 被当作「还需要更多输入」而非格式错误,流式解码器便持续把输入字节追加进一个 8 字节内部缓冲区,越界写坏相邻内存。攻击双向:未修复的服务端可被恶意客户端送来的压缩体接管,未修复的客户端也可被恶意服务端返回的压缩响应接管。

受影响的不止 Node.js

  • Node.js:22.23.4 / 24.22.1 / 26.12.1;20、23、25 系列已停止维护,不再出补丁
  • Bun 1.4.4;上游 Google Brotli 1.0.10 / 1.1.1 / 1.2.1
  • Envoy 1.40.0 / 1.39.3 / 1.38.6 / 1.37.8;Istio 1.31.2 / 1.30.6 / 1.29.9,仅在开启 Brotli 解压时暴露
  • Python 的 brotli 1.2.1 与 brotlicffi 1.2.1.0:装了包,requests、httpx、aiohttp 就自动解 br,代码不必 import brotli
  • .NET 8.0.33 / 9.0.22 / 10.0.14、Debian DSA-6582-1、cdxgen 13.5.0 亦已跟进

比漏洞本身更值得记的一点

根因修复早在 2 月 27 日就进了 Brotli 源码,当时无人认定为安全问题,此后八个月没有带修复的版本发布——上游上次发版还是 2025 年 10 月的 1.2.0。下游普遍把源码 vendor 进发布物,这八个月里按 tag 打包的产品都在携带一个修好却装不到的缺陷。含义是:能报出 OpenSSL 版本号的团队很多,能说清哪个二进制链接了 libbrotli 的很少。

现在该做什么

  • 先定位再升级:官方构建的 Node.js 自带 Brotli,升运行时即可;由系统库动态链接的发行版需同时更新 libbrotli
  • 升级后必须重启进程、重建镜像与编译产物,运行中的旧进程仍持有旧解码器
  • 短期缓解:入口拒绝 Content-Encoding: br;Envoy 与 Istio 只摘 Brotli 解压过滤器;Python 侧可卸载 brotli 与 brotlicffi 回落到 gzip
  • 无效做法:Accept-Encoding 里删掉 br 不管用,服务端仍可主动返回;各家 WAF 规则只覆盖入站
  • 曾在不可信 br 输入上运行过的对外进程,建议轮换云凭据与模型 API Key

不确定之处

评分不一致:Google 给 9.2 严重,Red Hat 评 8.1,Node.js 只标 high。Imperva 已在官方 Node.js 24.22.0(Linux ARM64)上取得代码执行,但需多次尝试、利用代码未公开;Bun、Envoy、Istio 与 Python 包目前仅有内存破坏的确认结论。截至 10 月 23 日,CISA 记录在野利用为「无」,未进 KEV 目录。

编辑说明

本文由北京拓实科技根据公开信息整理,核心事实与数据请以原始来源为准。