Brotli 高危漏洞扩散至 HTTP2Shell,多语言运行时受影响

Mores的头像Mores
Brotli 高危漏洞扩散至 HTTP2Shell,多语言运行时受影响

谷歌 Brotli 解码器中的一个越界写入漏洞正从 Node.js 扩散到更多语言和 HTTP 服务应用。该漏洞编号 CVE-2026-111497,CVSS v4.0 评分 9.2,属严重级别,影响 Brotli 1.0.3 至 1.2.0 版本。

Node.js 于 10 月 21 日率先披露该漏洞并称之为 Node2Shell,Python 次日确认相关软件包同样受影响;到 10 月 23 日,更多使用 HTTP 的语言和应用被确认存在风险,部分补丁尚未完全到位。

漏洞是什么

CVE-2026-111497 是谷歌 Brotli 解码器中的一处越界写入缺陷,影响 1.0.3 至 1.2.0 版本,覆盖所有平台。Brotli 是谷歌开发的无损压缩算法与数据格式,广泛用于 HTTP 压缩,对 HTML、CSS 和 JavaScript 等网页内容进行压缩后再传输,由客户端解压还原。

问题出在处理块切换的函数 DecodeBlockTypeAndLength()。在受影响版本中,该函数只返回一个布尔值,而 BROTLI_FALSE 既可能表示“数据流格式错误”,也可能表示“还需要更多输入”,调用方无法区分这两种情况;在快速路径上,解码器甚至完全丢弃了返回值。构造的数据流可以先声明单一块类型并耗尽该块长度,强制触发一次无法成功的切换,解码器随后要么对已经完整的数据流报告需要更多输入,要么沿用原有块状态继续解码,后一条路径即导致越界写入。

上游修复提交 google/brotli commit 0ed4268 将该函数改为返回错误码,并新增错误 BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH(-17),使安全路径与快速路径在遇到格式错误时都会停止解码。

影响范围有多广

该漏洞最初以 Node2Shell 之名进入公众视野,随后扩散范围被概括为 HTTP2Shell。10 月 21 日 Node.js 率先披露,10 月 22 日 Python 确认相关软件包同样受影响,10 月 23 日更多使用 HTTP 的主要语言和服务应用被确认存在风险。

具体受影响的组件包括 Node.js 内置的 Brotli 库、Python 的 Brotli 与 brotlicffi 包、libbrotli、C++、Bun、Envoy 和 Istio 等。只要环境中安装了 Brotli 1.2.0 或更早版本,或 brotlicffi 1.2.0.x,就处于暴露状态,因为 requests、httpx、aiohttp 等 HTTP 客户端在检测到这些包存在时会自动加载它们。

并非所有服务都受影响。Apache 的标准 mod_brotli 以及 Nginx 默认不解码 Brotli,因此不在默认暴露之列。截至 10 月 23 日,漏洞公告数据库尚未把该 CVE 映射到两个 PyPI 包,pip-audit、Dependabot 和 Safety 等工具暂时不会标记出存在漏洞的版本。

攻击如何实现

远程未认证攻击者可以向目标发送特制的 Brotli 压缩流,触发内存破坏,进而泄露敏感数据、使进程崩溃,或可能执行任意代码。该漏洞的 CVSS v4.0 评分为 9.2,属严重级别。

据 OpenAI 披露,该漏洞由其在今年 2 月发现,当时按未认证远程代码执行上报,且攻击是双向的:恶意客户端可以接管未修补的服务器,恶意服务器也可以接管接受压缩响应的未修补客户端。根本原因当时已在 Brotli 源代码中修复,但并未被认定为安全问题,也没有任何版本随该修复发布,因此每个内置 Brotli 的项目都需要各自发布更新。

在 Node.js 场景中,只要应用或依赖库会解压不可信的 Brotli 数据,例如使用内置 fetch() 或 body-parser,用户就处于风险之中。

各项目补丁状态

截至 10 月 23 日,多个项目已提供修复版本。Node.js 升级至 22.23.4、24.22.1 或 26.12.1;上游 libbrotli 升级至 1.2.1,旧发布线可使用已修补的 1.0.10 或 1.1.1;Python 包需将 Brotli 升至 1.2.1 及以上、brotlicffi 升至 1.2.1.0 及以上。

curl 与 libcurl 需将其 Brotli 依赖更新至 1.2.1 或厂商提供的安全修复包,静态链接的副本需要重新构建应用。

操作系统软件包应安装厂商的安全更新,厂商可能在不改变上游版本号的情况下回移修复。其他 HTTP 服务器、反向代理、API 网关和 HTTP 客户端需更新其使用的运行时或 Brotli 库;对于托管服务,应向提供商确认修复情况。更新依赖锁定文件后,还需重新构建受影响的应用程序和容器镜像、重新部署并重启服务,并核实运行中的工作负载确实使用了已修补组件。

无法升级时的应对

对于暂时无法升级的环境,可以采取临时缓解措施。Python 应用若 Brotli 支持并非必需,可从受影响环境中卸载 Brotli 和 brotlicffi,移除 httpx[brotli] 等会重新安装它们的依赖附加项,然后重新生成依赖锁定文件并重建、重启工作负载。HTTPX、Requests 和 urllib3 在没有这些可选包时仍支持 gzip 和 deflate,但若服务器仍发送 Brotli 响应,可能产生无法读取的响应或应用错误,自动回退并无保证。

对入站 HTTP 请求,可在反向代理、负载均衡器或应用中间件处拒绝 Content-Encoding 中包含 br 的请求,且须在任何存在漏洞的解码器处理请求体之前完成,匹配时不区分大小写,并覆盖编码列表中的情况。对出站 HTTP 请求,应从 Accept-Encoding 中移除 br,并在解码开始前禁用 Brotli 响应解码或拒绝 Content-Encoding 含 br 的响应。

仅修改 Accept-Encoding 并不充分,因为恶意服务器可以无视客户端声明直接发送 Brotli 响应,而 urllib3 是根据响应的 Content-Encoding 头选择解码器的。这些控制措施应持续到受影响组件完成修补并经过验证为止,并随厂商确认更多受影响组件或攻击路径而复查覆盖范围。

要点

  • 漏洞为 Brotli 解码器越界写入,CVSS 评分 9.2
  • 影响 Brotli 1.0.3 至 1.2.0 版本
  • Node.js 于 10 月 21 日率先披露该漏洞
  • OpenAI 称今年 2 月已发现该问题
  • Apache 与 Nginx 默认不解码 Brotli

原文链接

更多快讯

全部快讯
  1. Snyk、Mend、Socket 与 Dependabot 四款 SCA 工具横向对比
  2. 黑客组织用 Claude 与 Grok 智能体攻击拉美400多家金融机构
  3. BlackX UEFI bootkit 利用 Baton Drop 漏洞绕过 Secure Boot
  4. OpenAI 借助 GPT 5.6 Sol 发现 PHP 严重漏洞,多国政府官网紧急下线
  5. 甲骨文紧急发布 Java 更新,修复 9.1 级 HTTPS 信任漏洞

0 条回复

A文章作者M管理员
上传评论图片

暂无讨论,说说你的看法吧