安全研究团队Imperva公布了一个名为Node2Shell的可用漏洞利用,攻击者能通过精心构造的Brotli压缩数据,在Node.js应用内部执行代码。这条研究针对的是CVE-2026-111497,一个存在于Node.js内置Brotli解码器中的高危内存缺陷。

打开网易新闻 查看精彩图片

Node.js官方安全公告于2026年10月21日发布,确认该缺陷可能导致远程代码执行,影响22.x、24.x、26.x三个发布线。三个分支均已提供修复版本。

Imperva给出的独立概念验证,在官方Node.js 24.22.0 Linux arm64镜像上跑通了,没有借助调试器,也没有修改二进制文件。随压缩数据一同投递的代码生成了一个标记文件,而测试应用本身并没有被要求生成它。

在测试环境中,执行需要多次尝试。这个结果只能说明在那一特定构建和应用配置上实现了利用,并不等于在所有Node.js平台上都能稳定执行。

问题出在解码器的状态判断上。当解码器在Brotli流中遇到块类型之间的非法转换时,有缺陷的代码没有拒绝这个损坏的流,而是把该情况当作需要更多输入,带着非法的内部状态继续处理。

Imperva另一项内存消毒器测试显示,这种行为可能写出预期缓冲区之外。正是这次越界写,构成了所演示代码执行背后的内存破坏基础。

修复后的解码器会对非法转换返回格式错误。Node.js 24.22.1的发布说明确认包含了这项Brotli安全修复。在Imperva的应用测试中,该版本拒绝了同样的恶意输入,也没有生成标记文件。

测试覆盖了两类入口:通过Node.js内置fetch()函数消费的压缩HTTP响应,以及由配置好的Express和body-parser中间件解码的传入请求体。

  • Express 5.0.0 搭配 body-parser 2.0.1
  • Express 5.3.0 搭配 body-parser 2.3.0
  • 单独使用的 body-parser 2.0.0

在受影响的测试环境中,raw()和json()两条解析路径都允许执行。这些包提供的是通往受影响解码器的路径,缺陷本身并不在它们里面。一个裸的Node.js HTTP服务器不会自动解压传入的Brotli请求体。

管理员应部署22.23.4、24.22.1、26.12.1或这些分支中更新的修复版本。官方公告将这些版本列为解决该缺陷的安全更新。

团队需要检查部署容器和主机中实际运行的Node.js二进制文件,再排查哪些服务在解码不受信任的压缩请求或响应。

Imperva表示已添加覆盖复现攻击尝试的WAF规则。这些规则提供临时防护,但替换存在漏洞的运行时仍然必要。解码器报错和进程意外退出可以作为调查线索,但单凭其中任何一项都无法证明利用成功。