CVE-2026-111497:Brotli 解压缩缓冲区溢出漏洞,攻击者可远程执行代码(Node2Shell)

举报
yd_54922183 发表于 2026/11/05 08:52:58 2026/11/05
【摘要】 2026 年 10 月,Google Brotli 解码器被披露存在严重的越界写入漏洞 CVE-2026-111497,CVSS 4.0 评分为 9.2。攻击者通过构造恶意压缩数据,可能导致程序崩溃、内存泄露甚至远程代码执行。漏洞涉及 Node.js、Python、.NET 等多个生态,已有公开 PoC 和真实攻击尝试,并被 CISA 列入已知遭利用漏洞目录。

摘要: 2026 年 10 月,Google Brotli 解码器被披露存在严重的越界写入漏洞 CVE-2026-111497,CVSS 4。0 评分为 9。2。攻击者通过构造恶意压缩数据,可能导致程序崩溃、内存泄露甚至远程代码执行。漏洞涉及 Node。js、Python、。NET 等多个生态,已有公开 PoC 和真实攻击尝试,并被 CISA 列入已知遭利用漏洞目录。

一、漏洞概述

Brotli 是 Google 开发的一种开源数据压缩算法,广泛应用于 HTTP 内容压缩、浏览器、Web 服务及各种编程语言的运行时。

当浏览器请求网页时,服务器可以使用 Brotli 压缩响应内容,减少网络传输的数据量。HTTP 协议通过 Content-Encoding: br 标识这种压缩格式。

2026 年 10 月 22 日,Google 正式公开 CVE-2026-111497。问题出现在 Brotli 解码器处理异常压缩数据时的错误处理逻辑。

项目 详细信息
CVE 编号 CVE-2026-111497
漏洞名称 Node2Shell / Broccoli2Shell
影响组件 Google Brotli Decoder
漏洞位置 c/dec/decode。c
漏洞类型 越界写入、缓冲区溢出
CWE 编号 CWE-787、CWE-252
正式公开时间 2026 年 10 月 22 日
CVSS 4。0 9。2 / Critical
攻击方式 通过恶意 Brotli 压缩数据触发
可能后果 拒绝服务、内存泄露、远程代码执行

该漏洞由 OpenAI Codex Security 的 Khai Tran 和 Sylvie Mayer 发现并报告。

Google 确认 Brotli 1。0。3 至 1。2。0 范围内的多个版本存在问题,并于 10 月 21 日发布修复版本。

需要注意,Brotli 是多个软件共同使用的底层组件。即使开发者没有直接安装 Brotli,所使用的运行时或第三方依赖也可能包含存在漏洞的解码器。

二、漏洞原理:一次错误判断如何引发内存溢出?

理解这个漏洞,需要先知道 Brotli 解码器如何处理压缩数据。

1。 Brotli 的分块解码机制

Brotli 将压缩数据组织成 Meta-block,并在其中使用不同类型的数据块,包括:

  • Literal:需要直接输出的字面量数据。
  • Command:控制插入、复制等操作的命令。
  • Distance:表示数据复制距离的信息。

解码过程中,程序会读取数据块类型,并根据压缩流中的控制信息决定是否切换数据块。

正常流程大致如下:

接收 Brotli 压缩数据
         |
         v
解析 Meta-block
         |
         v
读取数据块类型
         |
         v
判断是否需要切换数据块
         |
         v
检查数据是否合法
         |
         v
解码数据并输出

关键问题发生在数据块切换时。

2。 错误的返回值处理

在存在漏洞的版本中,DecodeBlockTypeAndLength() 负责解析数据块类型及长度。

当压缩流要求切换数据块,但当前类别只有一种合法的数据块类型时,该切换操作应当被判定为格式错误。

旧版代码却返回:

if (max_block_type <= 1) {
    return BROTLI_FALSE;
}

这里的 BROTLI_FALSE 存在歧义。

解码器可能将其理解为暂时缺少输入数据,而没有立即终止异常压缩流的处理。

尤其在快速解码路径中,相关错误状态未被正确检查,导致解码器继续运行。

最终出现以下过程:

攻击者构造异常 Brotli 数据
           |
           v
触发非法数据块切换
           |
           v
解码函数返回模糊的错误状态
           |
           v
上层未正确识别永久性格式错误
           |
           v
继续向内部临时缓冲区写入数据
           |
           v
超过缓冲区容量
           |
           v
相邻内存被覆盖

Node。js 官方指出,受影响的流式解码路径可能持续向一个只有 8 字节 的内部缓冲区追加数据,最终发生越界写入。

这是典型的 Out-of-Bounds Write(OOB Write)。

3。 为什么可能变成远程代码执行?

C/C++ 程序会在内存中保存数据、对象状态、指针和函数调用信息。

当程序向缓冲区边界之外写入数据时,可能破坏相邻的内存结构。

轻微情况下,程序可能因为访问非法地址而崩溃。

如果攻击者能够进一步控制内存布局和覆盖内容,就可能修改关键指针,改变程序执行流程。

对于运行在服务器上的 Node。js 应用,这可能意味着攻击者最终以 Node。js 进程的权限执行代码。

这里真正危险的是:一次普通的解压缩操作,可能演变成整个应用进程被控制。

4。 官方如何修复?

Google 修改了数据块切换的错误处理逻辑。

修复后的关键代码为:

if (max_block_type <= 1) {
    return BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH;
}

新的返回值明确表示数据块切换格式错误。

同时,正常的输入不足场景会返回专门的 BROTLI_DECODER_NEEDS_MORE_INPUT 状态。

这样,解码器便能区分需要继续等待数据与必须终止的异常输入,避免后续越界写入。

对应修复提交可以在 GitHub 上查看:

google/brotli,提交 0ed4268a4401abcb44720963。

三、哪些软件和版本受到影响?

漏洞发生在 Google Brotli 的 C 语言解码器中,因此影响范围跨越多个软件生态。

1。 Google Brotli

受影响版本 修复版本
1。0。3~1。0。9 1。0。10
1。1。0 1。1。1
1。2。0 1。2。1

以上修复版本均已由 Google 官方发布。

2。 Node。js

Node。js 内置 Brotli 解码器,可通过 node:zlib 模块调用。

官方确认,22。x、24。x 和 26。x 分支受到影响。

Node。js 分支 首个修复版本
22。x 22。23。4
24。x 24。22。1
26。x 26。12。1

这些安全版本于 2026 年 10 月 21 日发布。已经停止维护的旧版本应迁移到受支持的安全分支。

需要特别注意:Node。js 中的 Brotli 通常是随运行时一起编译发布的,单纯更新 npm 依赖无法修复其内置解码器。

3。 Python

Python 生态中的以下第三方包受到影响:

Python 包 受影响版本 修复版本
Brotli 1。0。3~1。2。0 1。2。1
brotlicffi 1。0。3 至低于 1。2。1。0 1。2。1。0

使用这些组件处理外部 Brotli 数据的 Python 服务,应当及时检查依赖版本。

4。 。NET

微软也针对包含受影响 Brotli 解码器的 。NET 运行时发布了安全更新。

。NET 分支 修复版本
。NET 8 8。0。33
。NET 9 9。0。22
。NET 10 10。0。14
。NET 11 预览版 11。0。0-rc。3。26522。148

微软指出,ASP。NET Core 和 HttpClient 默认配置下不会自动启用相应的 Brotli 解压功能。

主要风险来自主动开启 Brotli 解压,或者明确调用解压 API 处理攻击者控制的数据。

。NET Framework 不受此次漏洞影响。

四、哪些开发者和系统管理员需要担心?

风险判断主要取决于两个条件:

第一,应用是否使用存在漏洞的 Brotli 解码器;第二,攻击者能否让该应用解压自己构造的数据。

以下是常见部署场景。

部署环境 风险判断
允许 Brotli 压缩请求体的 Node。js Web 服务 高
Express 5 使用默认请求体解析配置 高
使用 node:zlib 解压外部数据的服务 高
使用 Brotli 解压的 Python API 服务 高
启用 Brotli 解压的 。NET 服务 高
使用受影响依赖的 Docker 容器 需要检查
仅将 Brotli 用于输出压缩的服务 该漏洞的直接风险较低
不使用受影响解码器的软件 通常无直接影响

尤其需要关注 Express 应用。

Express 官方在 10 月 31 日的安全公告中确认,默认配置下,express。json()、express。urlencoded() 等请求体解析器可以处理带有 Content-Encoding: br 的压缩请求体。

例如:

const express = require('express');

const app = express();

app。use(express。json());

app。post('/api/data', (req, res) => {
    res。json({ status: 'ok' });
});

如果使用存在漏洞的 Node。js 运行时,攻击者向相关接口发送特制的 Brotli 压缩请求体,就可能触发底层解码问题。

另外,服务器主动获取外部 HTTP 资源时,如果响应数据经过有漏洞的 Brotli 解码器处理,同样可能形成攻击入口。

因此,即使服务器没有公开提供 Brotli 解压接口,仍需要检查是否会主动解压来自第三方的数据。

五、风险分析:PoC 已公开,真实攻击已出现

这是此次漏洞最需要重视的部分。

1。 公开 PoC 已经存在

2026 年 10 月 22 日,Imperva Red Team 披露了针对官方 Node。js 24。22。0 Linux ARM64 镜像的远程代码执行实验。

研究人员在 Express 和 body-parser 环境下,通过恶意 Brotli 数据成功执行代码。

实验需要多次尝试,表明利用过程受到内存布局等因素影响。

随后,ELLIO 研究团队在 x86-64 环境复现了远程代码执行,涉及 Node。js、Express、Koa 等应用环境。

GitHub 上也出现了公开 PoC 项目,例如:

  • dimasma0305/CVE-2026-111497-POC
  • googlesky/CVE-2026-111497

不同项目的验证程度有所差异,部分主要展示越界写入、拒绝服务或特定测试环境中的代码执行。

2。 已有真实攻击尝试

2026 年 10 月 26 日,ELLIO 宣布其安全传感器观察到了针对该漏洞的实际利用流量。

研究人员发现,有攻击者通过发送 Brotli 压缩请求探测目标,并随后尝试使用公开利用代码实施攻击。

2026 年 10 月 27 日,CISA 将 CVE-2026-111497 加入 Known Exploited Vulnerabilities(KEV)目录。

这说明漏洞已经获得真实利用证据,风险明显高于仅存在理论可利用性的漏洞。

不过,目前公开证据主要包括攻击流量、实际利用尝试,以及安全研究人员完成的远程代码执行实验。

这些证据尚不足以确定真实环境中成功入侵的总体数量。

3。 利用难度如何?

Google 给出的 CVSS 4。0 评分为 9。2,攻击复杂度指标为 Low,但同时标记了额外攻击条件。

Red Hat 则根据具体利用条件,将 CVSS 3。1 评分定为 8。1。

这两个评分使用了不同的 CVSS 版本和评估方法。

实际攻击中,恶意数据必须进入受影响的解码路径。进一步实现稳定代码执行,还可能受到内存布局、操作系统防护措施和运行环境的影响。

已有的研究结果说明,至少在部分常见部署环境中,这些利用条件可以被满足。

六、如何检查自己的系统?

1。 检查 Node。js 版本

node -v

查看内置 Brotli 版本:

node -p "process。versions。brotli"

注意:Node。js 可能回移安全补丁而保留原来的 Brotli 版本号,因此应优先根据 Node。js 官方安全版本判断。

查看 Express 依赖:

npm ls express body-parser

检查代码中是否使用 Brotli 解压:

grep -RnE \
'createBrotliDecompress|brotliDecompress|express\。json|express\。urlencoded' \
。/src

如果代码中存在相关调用,应继续确认输入数据的来源,以及解压操作是否允许外部用户触发。

2。 检查 Python 环境

python -m pip show Brotli brotlicffi

查看所有相关依赖:

python -m pip list | grep -i brotli

如果安装了受影响版本,还应检查是否被应用直接或间接调用。

3。 检查 Linux 系统库

Debian、Ubuntu:

dpkg -l | grep -i brotli

RHEL、Rocky Linux、AlmaLinux:

rpm -qa | grep -i brotli

发行版经常通过回移补丁修复漏洞,软件包版本可能仍显示较旧的上游版本。

例如 Ubuntu 24。04 的修复软件包版本为 1。1。0-2ubuntu0。1。

因此,应结合发行版安全公告和软件包修订号判断实际状态。

4。 检查 。NET

dotnet --list-runtimes

还需要检查应用是否使用自包含部署或 NativeAOT。

这些应用可能携带独立编译的 Brotli 解码器,需要重新构建才能获得修复。

七、修复方案与临时缓解措施

1。 升级到官方安全版本

对于 Node。js,建议优先升级整个运行时。

如果使用 nvm:

nvm install 24。22。1
nvm use 24。22。1

实际生产环境可选择更新的受支持安全版本。

Python 用户可以执行:

python -m pip install --upgrade Brotli brotlicffi

对于系统 Brotli 库,可以使用发行版包管理器更新:

# Ubuntu / Debian
sudo apt update
sudo apt upgrade
# RHEL / Rocky Linux
sudo dnf upgrade

容器环境还需要更新基础镜像、重新构建并部署应用。

2。 暂时关闭 Brotli 请求体解压

如果使用 Express,并且暂时无法升级 Node。js,可以在请求体解析中间件之前拦截 Brotli 压缩请求。

const express = require('express');

const app = express();

// 必须注册在请求体解压中间件之前
app。use((req, res, next) => {
    const encoding = (
        req。get('Content-Encoding') || 'identity'
    )。trim()。toLowerCase();

    if (encoding === 'br') {
        return res。status(415)。send(
            'Brotli request encoding is not supported'
        );
    }

    next();
});

app。use(express。json());

这种方法可以减少来自 HTTP 请求体的攻击机会。

如果应用使用 fetch() 获取外部 Brotli 压缩响应,仍需要处理相应风险。

3。 降低应用权限

建议同时采取以下措施:

  • 使用普通用户运行 Node。js、Python 等服务。
  • 限制容器权限,避免以特权模式运行。
  • 对外部 HTTP 数据源实施访问控制。
  • 通过反向代理或 WAF 拦截不需要的 Brotli 压缩请求体。
  • 监测异常进程崩溃和可疑的 Content-Encoding: br 请求。

这些措施有助于降低漏洞被利用的可能性及成功后的影响范围。

彻底修复仍需要更新存在漏洞的 Brotli 解码器。

八、总结

CVE-2026-111497 的危险性来自三个事实。

首先,漏洞位于使用范围极广的 Brotli 底层解码器中,Node。js、Python、。NET 等多个生态都可能受到影响。

其次,漏洞成因非常典型:一个错误的返回值被当作正常状态处理,最终让解码器持续向容量有限的缓冲区写入数据。

最后,公开安全研究已经验证远程代码执行,真实网络中也出现了攻击尝试,CISA 已将其列入 KEV 目录。

对于开发者和系统管理员,当前最重要的工作是:

1。 确认应用是否会解压来自外部的 Brotli 数据。
2。 检查 Node。js、Python、。NET 和系统 Brotli 库的实际安全版本。
3。 尽快更新受影响的运行时及依赖,并重新部署相关容器。
4。 暂时无法升级时,限制 Brotli 解压入口并降低服务运行权限。

这个漏洞也提醒我们:一些看似普通的基础功能,例如 HTTP 数据压缩,背后依赖的原生代码同样可能成为严重的安全风险来源。


资料核验日期:2026 年 11 月 5 日。

主要参考资料:Google Brotli 官方 GitHub 安全版本公告、Node。js 2026 年 10 月安全公告、GitHub Advisory Database GHSA-9v8h-qqgm-4m35、微软 。NET 安全公告、Express 官方安全公告、CISA KEV、Imperva Red Team、ELLIO Threat Research Lab、Tenable、Red Hat 及 Ubuntu 安全公告。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。