run_nmap_scan 实现 OS 命令注入run_nmap_scan MCP 工具通过对 target 和 additionalFlags 参数进行字符串插值来构建命令,并通过 child_process.exec(即 /bin/sh -c)执行。
⚠ 请先阅读 — 重复标识符
此漏洞在该 CVE 编号存在之前就已公开。 它由 CVE-2026-3484 / GHSA-xc68-rrqc-qgq3 覆盖,该编号由 VulDB 分配,于 2026-03-03 针对
mcp-nmap-server <= 1.0.1发布 — 相同的软件包、相同的 CWE-78child_process.exec汇聚点。CVE-2026-52616 由 MITRE CNA-LR 于 2026-07-13 根据一份独立报告分配给 s1ko。该分配看起来是一个重复项,并已按此标记。应引用的编号是先前已存在的 CVE-2026-3484。
本仓库的发布是为了完整性和记录这个重复项,并非声称新发现。原始公开披露的功劳不属于 s1ko。
对于任何对此进行去重的人,有一个命名陷阱值得注意:npm 软件包名为 mcp-nmap-server,而仓库名为 nmap-mcp-server。这两种命名顺序指向同一个项目。
MCP 工具参数会受到攻击者的影响。它们由 LLM 根据代理处理的内容(文档、网页、工具输出)生成,因此间接提示注入使攻击者能够控制工具处理程序收到的值。任何将这些值之一送入 shell 的处理程序,都会把这种影响转化为在运行 MCP 服务器的主机上的代码执行。这与先例 aws-mcp-server / CVE-2026-5058 是相同的模型。
dist/index.js — target 被追加到命令字符串中,然后交给 exec:
command += ` ${target}`;
…
const { stdout, stderr } = await promisify(exec)(command);
child_process.exec 在 /bin/sh -c 中运行其参数,因此调用方贡献的一切都是 shell 语法。Zod 输入模式声明了 z.string(),它只验证类型,对内容不做任何限制,因此元字符可以原样通过。additionalFlags 通过同样的路径到达同一个字符串。
将 target 设置为 127.0.0.1; touch /tmp/marker; echo INJECTED 的 run_nmap_scan 调用会产生:
/bin/sh -c "nmap … 127.0.0.1; touch /tmp/marker; echo INJECTED"
poc/driver.mjs 通过 stdio 与 MCP 通信:它初始化服务器,对 run_nmap_scan 发起一次带有注入 target 的 tools/call,并检查标记文件。载荷是一个无害的 touch。
npm pack [email protected]
tar xf mcp-nmap-server-1.0.1.tgz && cd package && npm install
node ../poc/driver.mjs
在受影响版本上的预期结果:
==== POC RESULT (mcp-nmap-server) ====
marker /tmp/PWNED_nmap created: true
verdict: CONFIRMED — command injection executed
不需要安装 nmap — 无论开头的二进制文件是否能够解析,注入的命令都会在同一个 /bin/sh -c 字符串中运行。已于 2026-06-01 在隔离容器中验证,并于 2026-06-13 重新验证。请仅针对你被授权测试的基础设施运行。
;、&&、||、|、反引号或 $( 的 nmap 命令行。nmap 开头且分隔符后包含第二个命令的 sh -c 进程 — 一种不依赖应用程序日志的进程树信号(auditd、eBPF、Falco、EDR)。nmap 是预期的;shell、解释器或网络客户端则不是。target 或 additionalFlags 包含 shell 元字符。target 应匹配 IP、CIDR 或主机名,且仅此而已。MITRE ATT&CK T1059.004 命令和脚本解释器:Unix Shell。
该仓库已归档且为只读状态,npm 上的 latest 就是受影响的 1.0.1,不会发布任何修补版本。缓解措施就是移除:
target 或 additionalFlags 到达命令字符串之前,对 target 进行 IP/CIDR/主机名模式验证,并对 additionalFlags 进行白名单过滤。对于任何派生该项目的人来说,修复方法是使用参数向量调用 execFile("nmap", [...args]),而不是为 exec 构建字符串。底层要求是内容验证,而不仅仅是 Zod 类型验证。
NIST SP 800-53r5 SI-10;OWASP ASVS v4 §5.3.8;CWE-78 缓解措施 M1 和 M2。
aws-mcp-server)同一轮研究中的配套公告: CVE-2026-52617、 CVE-2026-52618。
MIT — 参见 LICENSE。
| CVE | CVE-2026-52616 — CVE-2026-3484 的重复项 |
| CWE | CWE-78(OS 命令中特殊元素的不当中和) |
| 软件包 | mcp-nmap-server (npm) |
| 受影响版本 | 1.0.1 及更早版本 — 所有已发布版本 |
| 修复版本 | 无 — 仓库已归档 |
| CVSS v3.1 | AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 7.8 高危(stdio 传输)。如果服务器包装在网络传输中,AV:N → 9.8 严重。 |
| 独立报告者 | s1ko (github.com/s1ko,[email protected]) |
| CVE 分配 | 2026-07-13,MITRE CNA-LR |
| 日期 | 事件 |
|---|
| 2026-03-03 | CVE-2026-3484 / GHSA-xc68-rrqc-qgq3 由 VulDB 发布 — 由另一位报告者进行的原始公开披露 |
| 2026-05-29 | 通过审查已发布 tarball 的源码独立发现,当时不知晓三月份的安全公告 |
| 2026-06-01 | 在隔离容器中通过 MCP stdio 进行动态验证 |
| 2026-06-13 | 在提交前去重过程中识别出重复项;确认仓库已归档,私有漏洞报告功能不可用。内部结论:不提交 |
| 2026-07-13 | MITRE CNA-LR 仍分配了 CVE-2026-52616,并将 s1ko 记为发现者 |
| 2026-08-22 | 本文发布,记录该重复项 |