此前被命名为 HTTP2Shell(Node2Shell)的高危漏洞 CVE-2026-111497,近期有了新的关键发现:风险根源并不在 HTTP 协议本身,而是 Brotli 解码器的越界写缺陷。这个问题可以脱离 Web 流量场景,在 .NET、FFmpeg、ClickHouse、Apache Arrow 等多款主流组件中触发异常。
此前行业普遍只盯着 Node.js 生态的修复进度,大量团队仅核查了 Node 版本,很容易忽略其他依赖 Brotli 库的业务组件,存在大面积漏检的风险。
JFrog 安全研究团队在 10 月 25 日公开了完整的验证结果:不同软件对 Brotli 库的调用方式存在差异,漏洞触发后的表现也各不相同,可能造成程序崩溃、堆内存损坏、死循环 CPU 耗尽等多种后果。
漏洞底层原理
漏洞存在于 Google Brotli 解码器中,受影响的上游版本区间为:Brotli 1.0.3 至 1.0.10 之前、1.1.0 至 1.1.1 之前、1.2.0 至 1.2.1 之前。畸形的块切换指令会使解码器误判为需要持续读取输入,从而维持在一个非法状态,最终触发缓冲区越界写入。
各组件验证情况
- ClickHouse:仅一条携带恶意 Brotli 压缩载荷的 HTTP 请求,就能直接让数据库服务进程发生段错误崩溃,正在执行的查询全部中断。研究披露时,官方代码已合并修复,但尚未发布正式的补丁包。对于依赖 ClickHouse 承载关键查询业务的团队来说,这个细节值得重点关注。
- .NET:调用内置 Brotli 解压接口即可触发。两段式恶意流会破坏堆内存,抛出 SIGSEGV 段错误并直接杀死进程,普通的托管异常机制无法捕获。
- FFmpeg:攻击载体是特殊构造的 JPEG XL 图片,恶意 Brotli 数据藏在图片元数据中,经由 libjxl 解析时触发内存损坏。目前验证可以控制损坏指针,但暂时未能实现稳定的远程代码执行。
- Apache Arrow(pyarrow):仅 534 字节的恶意输入,就能让 Brotli 解码逻辑陷入无限循环,持续占满 CPU,任务直接卡死;修复版 Brotli 1.2.1 可以快速拒绝该恶意载荷。
重要提醒
部分厂商会在不升级 Brotli 上游版本的情况下单独合入漏洞补丁,因此不能只靠 Brotli 版本号来判断是否安全,必须查看对应软件厂商的补丁公告。Node.js 侧的补丁已先行发布:22.23.4、24.22.1、26.12.1 版本均已修复该问题;其余组件则需要等待各自的新版本。
自查建议
企业安全团队在梳理业务时,应重点追踪所有解压入口:不可信文件、前端传入的缓冲区、内外网请求与响应体中的 Brotli 解压链路。扫描工具只能定位调用链路,检出不代表一定可以被远程利用,还需要结合业务场景来评估实际的风险等级。
资讯来源:JFrog Security Research、Cybersecuritynews。
如果你也在维护依赖 Brotli 的组件,不妨把这篇文章转给相关的同事,排查一下实际调用链是否已覆盖。更多技术漏洞分析与实战解读,欢迎关注云栈社区。
|