Node2Shell 实锤官方镜像可 RCE Brotli 解码器修复版本对照

[复制链接]
上周在排查一台跑 Express 的服务时顺手查了下 Node 版本,结果查出一件事:Node.js 官方 10 月 21 日发的安全更新里,那个 Brotli 解码器的洞(CVE-2026-111497)已经有人在官方原版镜像上做出了 RCE,社区给起了个名字叫 Node2Shell,也有人叫 Broccoli2Shell。我原以为这类解码器洞顶多崩进程,翻完 Imperva 的研究才发现判断错了,值得单独写一篇。

fig_node.png

先说漏洞本身。CVE-2026-111497 出在 Brotli 解码器上:一个构造得恰好"看起来没完"的畸形流,会让解码器把非法状态当成"还需要更多输入"继续处理,越界写入随之发生。修复逻辑是让解码器对这种非法的块切换直接返回格式错误。这个洞不只 Node.js——同一个解码器被 Bun(1.4.4 之前)、Python 的 brotli/brotlicffi、Envoy、Ruby brotli gem 等大量组件捆绑,Node.js 只是研究做得最透的那个。

Imperva 红队 10 月 22 日公开的成果是关键转折:他们在官方、未修改的 node:24.22.0 Linux arm64 镜像上,通过内置 fetch() 消费恶意 Brotli 响应、以及通过 Express 5 的请求体两条路径,都拿到了代码执行。没有调试器、没有定制编译、ASLR 保持宿主默认。升到 24.22.1 后,同样的输入直接被 400 和 ERR_ERROR_FORMAT_BLOCK_SWITCH 拒绝。要如实说明:他们只验证了 arm64 这一个构建,x86-64 上是否同样能成还没定论,之前公开的 PoC 在标准构建上也只能做到崩溃加受限内存读。但这不妨碍把它按高危处理——两条攻击路径都在公网可达范围内。

这版补丁还有个检查上的坑,我第一次就差点踩了:Node.js 是从上游 cherry-pick 的修复,没有同步升捆绑的 Brotli 版本号,所以 process.versions.brotli 在打了补丁和没打的构建上都报 1.2.0。判断打没打补丁只能看运行时版本号(node --version),别看这个字段。

修复版本对照:Node.js 22.x 升 22.23.4,24.x 升 24.22.1,26.x 升 26.12.1;Node.js 20、23、25 这几条线没有修复,要迁到受支持分支。Google Brotli 升 1.2.1(另有回补的 1.0.10 和 1.1.1);Python 侧 PyPI 的 brotli 升 1.2.1、brotlicffi 升 1.2.1.0;Bun 升 1.4.4;Envoy 升 1.40.0(或 1.39.3/1.38.6/1.37.8/1.36.12);Debian 有 DSA-6582-1(trixie)和 DLA-4855-1(bookworm)。还有一条容易漏的:Debian 的 tracker 里记着"nodejs 使用系统提供的 brotli 库",也就是说有些发行版的 Node 链接的是系统 Brotli,这种环境下升 Node 没用,得升系统 brotli 包。容器镜像里捆着的旧运行时同理,包清单查不到,要进容器里查版本。

哪些服务真的暴露,取决于有没有不可信的 Brotli 数据进到解码器。三条典型路径:请求体带 Content-Encoding: br——Express 5 的 express.json()/raw()、body-parser 2.x、Koa 的 bodyparser 都会在路由处理前解压,等于每个 JSON 或表单端点都是解码入口;出站 fetch() 对上游响应自动解压——undici、axios、got、服务端抓取类框架都算,链接预览、webhook 投递、爬虫这些"URL 由别人给的"场景最危险;直接调 node:zlib 的 brotli 函数处理客户端数据。排查命令很简单:node --version 确认运行时,代码里 grep express.json、body-parser、fetch( 找解码入口。反向代理层面暂时拒掉 Content-Encoding: br 的请求体可以作为缓冲手段,但这和 WAF 一样是缓解,不是修复。

截至 10 月 22 日没有在野利用报告,但公开 PoC 已经挂出来,按现在的节奏预期很快有武器化版本。核心结论就一句:这是解码器里的洞,唯一完整的修复是换掉受影响的运行时,别指望中间件和 WAF 替你扛。

来源如下,版本与时间线以 Node.js 官方与 Imperva 原文为准:

1. Imperva:Node2Shell - From Brotli Data to Remote Code Execution(一手研究,2026-10-22)
   https://www.imperva.com/blog/node2shell-from-brotli-data-to-remote-code-execution/
2. Node.js:October 2026 security releases(官方发布)
   https://nodejs.org/en/blog/vulnerability/october-2026-security-releases
3. ELLIO:Node2Shell (CVE-2026-111497) RCE analysis(修复版本总表与系统 Brotli 提醒)
   https://ellio.tech/en/blog/node2shell-cve-2026-111497-rce-on-stock-nodejs-builds
4. 4sysops:Node2Shell RCE demonstrated on an official Node.js 24 build
   https://4sysops.com/archives/node2shell-rce-demonstrated-on-an-official-node-js-24-build
5. rdintel:Broccoli2Shell 时间线与署名澄清(发现者为 OpenAI Codex Security,Imperva 做利用研究)
   https://rdintel.com/news/item/hn/50221110
6. Shield53:Node2Shell 分析(两条公网可达路径的梳理)
   https://news.shield53.com/node2shell-what-the-brotli-decoder-rce-means-for-nodejs-deployments

**HKTULU**
2026-10-26
@九幽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关链接:

手机版 | 电脑版 | 中国红客

Copyright © 2000 - 2025 中国红客 版权所有 湘ICP备2023007301号-1
中国红客公众号
中国红客公众号
中国红客抖音号
中国红客抖音号
中国红客官方微博
中国红客官方微博
意见
反馈