CVE-2026-111497:Node.js Brotli 解码器中的严重 Node2Shell 漏洞
Detection stack
- AIDR
- Alert
- ETL
- Query
摘要
Node2Shell 是一个严重漏洞 (CVE-2026-111497),影响了与 Node.js 捆绑的 Brotli 解码器,由于越界写导致。攻击者可以通过向处理 Brotli 数据的服务提供格式错误的压缩流来利用此缺陷,可能导致服务拒绝、内存泄露或远程代码执行。该漏洞特别对使用 Express 5 或自动执行 Brotli 解压的中间件的服务构成风险。
调查
Sysdig 威胁研究团队分析了该漏洞,并报告称在补丁发布后的几小时内就出现了一个公开的 PoC。Imperva 和 Vercel 的研究表明,在包括 Linux arm64 在内的特定架构上可能实现代码执行。调查显示,可利用性取决于应用程序或其库(如 body-parser)是否处理攻击者控制的 Brotli 流。
缓解措施
主要的缓解措施是将 Node.js 升级到 22.23.4、24.22.1 或 26.12.1 版本,并将 Bun 更新到 1.4.4 或更高版本。组织还应在可行的情况下禁用请求解压缩,包括在 body-parser 中设置 inflate: false 。部署 WAF 规则以拒绝不受信任的 Content-Encoding: br 请求,并在非特权账户下运行服务,以提供额外的防御层。
响应
如果检测到潜在的利用链,例如 Node.js 进程崩溃随后出现意外程序执行,安全团队应立即隔离受影响的工作负载。监控后台利用行为,包括交互式 shell、未经授权的恶意软件下载、加密挖矿或秘密与云令牌的盗窃。对所有可达到的易受攻击服务进行补丁仍应是最高优先事项。
攻击流程
我们仍在更新这一部分。
检测
可疑的 NodeJS 子进程 [Windows] (通过 cmdline)
通过 Web 服务器 [Linux] 的可疑 Shell (通过 process_creation)
可疑的 NodeJS 子进程 [Linux] (通过 cmdline)
Node.js 进程崩溃后随即进行就地程序执行的检测 – Node2Shell 利用 [Linux 进程创建]
模拟执行
-
攻击叙述 & 命令: 对手针对运行 Node.js 的 Web 应用程序。他们发送一个恶意的 Brotli 压缩负载,触发内存损坏错误,导致
node进程崩溃。紧接着崩溃,攻击者利用劫持的执行流生成一个/bin/bashshell 以建立持久性并开始本地侦察。这一事件序列由node事件后跟/bin/bash执行,旨在匹配selection_crashandselection_suspicious_exec检测规则的逻辑。 -
回归测试脚本:
#!/bin/bash # 模拟 Node2Shell 风格的利用模式 echo "[+] 正在启动 Node2Shell 模拟..." # 1. 模拟一个出现'崩溃'或被突然终止的 Node.js 进程 # 真实场景中,这是一次崩溃。这里我们模拟节点进程被调用/处理中断的遥测数据。 node -e "process.exit(1)" echo "[+] Node.js 进程'崩溃' (退出代码 1)。" # 2. 模拟可疑 shell 的即时执行 # 这模仿崩溃后负载触发 shell。 /bin/bash -c "echo '利用成功:已生成 Shell'" echo "[+] 模拟完成。检查 SIEM 以进行检测。" -
清理命令:
# 本次模拟未创建持久文件。 # 只需确保没有流氓的 bash 进程正在运行。 pkill -f "利用成功"