谷歌Brotli曝9.2分漏洞 全行业连夜打补丁
一个藏在压缩库里的内存越界写漏洞,过去一周把半个互联网的服务器推上了紧急打补丁的节奏。谷歌维护的 Brotli 解压器被曝出高危缺陷,编号 CVE-2026-111497,安全社区给它起了好几个外号:Node2Shell、HTTP2Shell、Broccoli2Shell。

问题出在流式解压的边界判断上。按 Node.js 安全公告的解释,构造特殊的数据流可以触发一次非法的块切换,解码器却把它当成「还需要更多输入」而不是格式错误,于是不断往一个 8 字节的内部缓冲区追加字节,写穿边界,踩坏相邻内存。结果是进程崩溃、内存内容泄漏,甚至让未经认证的攻击者执行任意代码。
影响面不小。受影响版本覆盖 Brotli 1.0.3 到 1.2.0。谷歌给出的 CVSS v4 评分是 9.2;微软按 CVSS v3.1 记为 8.1,定性为权限提升,并标注「更可能被利用」。任何把攻击者可控数据交给受影响解码器的程序都在射程之内:压缩过的 HTTP 请求体、从不可信服务器抓回来的响应,以及压缩文件本身。
修复其实比披露来得早。这个根因今年 2 月就在 Brotli 源码里改掉了,但当时没人意识到它构成安全漏洞,之后也一直没有新版本发布,下游因此全停在有问题的代码上。直到 OpenAI 的 Codex Security 团队在红队测试中撞上它,整条链路才被串起来:先通知 Brotli 维护者,再通知各个依赖方,最后统一披露。
上周开始补丁密集落地。Brotli 发布 1.0.10、1.1.1、1.2.1;Node.js 发布 22.23.4、24.22.1、26.12.1;Python 的 Brotli 与 brotlicffi 分别升到 1.2.1 和 1.2.1.0;Bun、Envoy、Istio 也已跟上。10 月 25 日,微软在正常补丁周期之外发了一批带外更新,覆盖 .NET 8.0.33、9.0.22、10.0.14 和 .NET 11 RC3,以及 Visual Studio 2019、2022、2026 与 PowerShell 7.4、7.5、7.6。
能不能真的打出远程代码执行,目前还有争论。Imperva 称已在官方 Node.js 24.22.0 的 Linux arm64 镜像上做出代码执行,恶意数据既可以放在服务器返回的响应里,也可以放在 Express 5 或 body-parser 2 处理的请求体里;但他们也承认并非每次都成功,利用代码没有公开。GitHub 上流传的概念验证只在一个被人为削弱的构建上跑通,另有研究者认为这个洞最多只能做拒绝服务。
截至目前没有在野利用的报告。补丁也不只是升级一个包:已经在跑的进程还在用旧代码,服务必须重启,容器镜像必须基于打过补丁的基础镜像重建。只在入口拦掉 Brotli 请求同样不够,响应方向那条路径照样暴露。
还有一批项目没跟上。公开的追踪清单上,DuckDB、Apache Arrow、7-Zip-zstd、p7zip 和 EDK II 仍被列为未修复,清单维护者提醒这份名单并不完整,也不是每个配置都会走到有问题的代码路径。微软同时修掉的另一个洞 CVE-2026-114148 与 Brotli 无关,是 Linux 版 .NET 分发包里的属主元数据问题,属于本地提权。微软强调 .NET Framework 不受影响,ASP.NET Core 的请求解压和 HttpClient 的自动响应解压默认也都不开。
编译自 BleepingComputer,原标题:"Microsoft and others push out emergency patches for a critical flaw in Brotli"