安全攻防
evening
Node.js、Python、Bun全中招:一个压缩库的内存漏洞,让半个互联网"裸奔"
2026-11-04
1 阅读
约10分钟阅读
安全客
字号:
Google Brotli解码器曝出严重内存损坏漏洞,影响Node.js、Python、Bun、Envoy等主流软件,Imperva已证明可在Node.js上远程代码执行,你的应用可能正在解压恶意数据。 你以为压缩库能有什么安全问题?不就是解压个文件吗? 醒醒。一个压缩库的漏洞,能让你的Node.js服务器被远程控制,能让Python应用崩溃,能让Envoy代理变成攻击者的跳板。 这不是危言耸听。这是2026年10月21日,Google Brotli解码器漏洞(CVE-2026-111497)披露后,安全圈的真实反应。 一、Brotli是什么?为什么这个漏洞影响这么大 先科普一下。Brotli是Google开发的一种压缩格式,主要用于Web压缩。你在浏览器里看到的网页、图片、API响应,很多都是Brotli压缩后传输的。目的是减少带宽、加快加载速度。 现在,全球绝大多数Web服务器、CDN、代理都在用Brotli。Node.js内置了Brotli解码器,Python有brotli和brotlicffi包,Bun(新一代JavaScript运行时)内置了Brotli,Envoy(流行的云原生代理)也内置了Brotli。 问题来了:这些软件都是各自内置了一份Brotli解码器的代码。现在这份代码出了漏洞,意味着所有内置了这份代码的软件,都受影响。 这不是”一个软件有漏洞”,而是”一个库有漏洞,一堆软件跟着遭殃”。 漏洞编号CVE-2026-111497,类型是”越界写”(Out-of-Bounds Write)。什么意思?攻击者构造一个恶意的Brotli压缩数据,解码器在处理这个数据时,会写入超出缓冲区边界的数据,覆盖相邻的内存区域。 后果是什么?三种可能: 程序崩溃 (拒绝服务,DoS) 内存泄漏 (敏感信息暴露) 执行攻击者控制的代码 (远程代码执行,RCE) 第三种,是最致命的。 二、Node2Shell:Imperva证明可在Node.js上远程代码执行 漏洞披露后,安全公司Imperva的研究人员做了一个实验:能不能用这个Brotli漏洞,在Node.js上实现远程代码执行? 答案是:能。 他们把这个利用方式叫做”Node2Shell”。具体来说,他们在官方发布的Node.js 24.22.0版本(Linux arm64架构)上,通过喂入精心构造的Brotli数据,成功执行了攻击者提供的代码。 注意,这不是什么魔改版、调试版的Node.js,是官方发布的正式版本。没有修改任何代码,没有加任何调试器,就是原汁原味的Node.js。 Imperva的研究人员也承认,这个利用不是每次都能成功,在他们的Linux arm64环境下,需要尝试几次才能成功执行代码。而且这个结果只覆盖了这一个构建和应用设置,其他架构(比如x64)和其他版本线(22.x和26.x)没有测试。 但即便如此,这已经足够吓人了。因为: 之前公开的PoC(概念验证)只能在故意削弱的测试构建上实现代码执行 这次是在标准构建上实现了代码执行 这证明漏洞是真实可利用的,不是理论上的风险 更关键的是,Imperva在修复后的版本24.22.1上测试了同样的数据,结果被拒绝,没有执行任何代码。这说明补丁是有效的。 问题是:你的Node.js升级了吗? 三、影响范围:Node.js只是冰山一角 Node.js只是Brotli漏洞影响的软件之一。根据目前已知的信息,以下软件都受影响: Node.js 22.x版本:低于22.23.4 24.x版本:低于24.22.1 26.x版本:低于26.12.1 Python brotli包(所有版本) brotlicffi包(所有版本) Bun Envoy 还有其他使用Google Brotli解码器的软件,都可能受影响。 为什么影响这么广?因为Brotli是Web标准的一部分。现代Web性能优化,离不开Brotli压缩。你在Nginx、Apache、Cloudflare、AWS CloudFront上配置的Brotli压缩,底层用的都是同一份Google的代码。 现在这份代码出了漏洞,意味着整个Web基础设施的底层,都出现了裂痕。 四、你的应用中招了吗?怎么排查和修复 如果你的应用用到了Brotli解压,那很可能受影响。具体来说,以下情况需要警惕: Node.js应用 代码中显式调用了 zlib.brotliDecompress() 、 zlib.brotliDecompressSync() 等接口 使用了接受Brotli压缩数据的HTTP服务器(比如Express、Koa等框架,配置了Brotli解压) 使用了第三方库,这些库内部调用了Brotli解压 Python应用 导入了 brotli 或 brotlicffi 包 代码中调用了 brotli.decompress() 等接口 使用了接受Brotli压缩数据的Web框架或中间件 Bun应用 所有Bun应用,因为Bun内置了Brotli解码器 Envoy代理 怎么排查? Node.js node -v # 查看版本 # 对比受影响版本:22.x < 22.23.4, 24.x < 24.22.1, 26.x < 26.12.1 Python pip show brotli # 查看brotli版本 pip show brotlicffi # 查看brotlicffi版本 Bun bun -v # 查看版本 怎么修复? Node.js 22.x升级到22.23.4或更高 24.x升级到24.22.1或更高 26.x升级到26.12.1或更高 升级后重启所有Node.js进程 使用容器或自带Node.js运行时的应用,需要更新镜像或应用内置运行时并重新部署 Python 等待brotli和brotlicffi官方发布修复版本 临时缓解:避免解压来自不可信来源的Brotli数据 如果必须解压,先对数据进行大小和格式校验 Bun 等待Bun官方发布修复版本 临时缓解:禁用Brotli解压功能,改用gzip/deflate Envoy 等待Envoy官方发布修复版本 临时缓解:禁用Brotli解压过滤器,或限制解压数据的来源 阿里云开发者社区的文章也提醒:默认情况下Node.js不会直接进行Brotli解码,需要应用或依赖实际执行Brotli解压。但目前未见公开利用代码与在野利用报告。 注意,”未见在野利用”不代表”不会被利用”。Imperva的Node2Shell已经证明漏洞是可利用的。攻击者只是在等,等你的Node.js还没升级。 五、供应链安全的老问题:一个库漏洞,半个互联网遭殃 Brotli漏洞再次暴露了软件供应链的老问题:一个底层库的漏洞,会沿着依赖链向上蔓延,最终影响成千上万的应用。 2021年的Log4Shell(Log4j漏洞),影响了几十万个Java应用。2024年的xz-utils后门,差点让全球Linux系统遭殃。现在的Brotli漏洞,影响了Node.js、Python、Bun、Envoy等主流软件。 共同的特征: 底层库被广泛依赖 :Log4j、xz、Brotli,都是各自生态中的基础组件 漏洞影响面极广 :一个库出问题,
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱