安全研究团队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规则。这些规则提供临时防护,但替换存在漏洞的运行时仍然必要。解码器报错和进程意外退出可以作为调查线索,但单凭其中任何一项都无法证明利用成功。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.