Google Brotli 压缩库中出现了一个编号为 CVE-2026-111497 的关键安全漏洞。由于该漏洞影响 Node.js,最初被称为“Node2Shell”。该漏洞是发生在 `DecodeBlockTypeAndLength()` 函数中的越界写入。该函数负责处理块切换——即 Brotli 流更改其使用的 Huffman 树的节点。在受影响的版本(1.0.3 至 1.2.0)中,该函数返回的布尔值可能会被解码器误解为请求更多输入或流格式错误的信号。在解码器的“快速路径”上,此返回值会被丢弃,从而允许精心构造的流强制执行失败的切换,随后导致越界写入。这可能允许未经身份验证的远程攻击者泄露内存、导致进程崩溃或执行任意代码。

此图展示了核心漏洞及其对 Web 服务和 Python 软件包扩展的影响。

此视觉效果演示了 Brotli 库中越界写入的实际利用过程。
由于该漏洞已被确认影响主要的 Python 软件包和各种 Web 服务运行时,其影响范围显著扩大。因为 Brotli 是 HTTP 压缩的标准,许多 Python HTTP 客户端(包括 `requests`、`httpx` 和 `aiohttp`)如果环境中存在,会自动加载并使用受影响的 `Brotli` 或 `brotlicffi` 软件包。这意味着即使应用程序没有在其源代码中显式导入 Brotli 库,也可能暴露于此漏洞中。该漏洞特别危险,因为它可以通过出站请求(例如恶意服务器向客户端发送精心构造的响应)或入站请求(例如客户端向服务器发送包含恶意请求体的请求)触发。
修复措施包括升级到受影响库的补丁版本。对于 Python 用户,应升级到 `Brotli` 1.2.1 或更高版本,以及 `brotlicffi` 1.2.1.0 或更高版本。其他受影响的运行时,如 Node.js、Bun 和 Envoy,也已发布补丁。对于无法立即升级的用户,安全专家建议在反向代理或负载均衡器层面拒绝包含 `Content-Encoding` 标头中 `br` 的传入 HTTP 请求。此外,从 Python 环境中移除 Brotli 和 `brotlicffi` 软件包也可以降低风险,因为大多数流行的 HTTP 客户端将自动回退到 `gzip` 或 `deflate` 压缩。
虽然根源问题已在 2026 年 2 月的 Brotli 上游源代码中得到解决,但该修复最初并未被识别为安全漏洞,导致补丁版本的发布推迟到 10 月。这意味着任何捆绑了旧版本库的项目或容器镜像在重新构建包含更新组件的版本之前都仍处于易受攻击状态。由于许多漏洞数据库尚未将此 CVE 映射到特定的 PyPI 软件包,诸如 `pip-audit` 或 `Dependabot` 等自动化工具可能尚未将这些版本标记为高风险,因此需要手动检查依赖树。