
nmap MCPサーバーにおけるOSコマンドインジェクションに関するアドバイザリと良性のPoC。重複CVEの追跡、検出ガイダンス、および緩和策を含みます。
run_nmap_scan を介した OS コマンドインジェクションrun_nmap_scan MCP ツールは、target および additionalFlags パラメータを文字列補間してコマンドを構築し、それを child_process.exec、すなわち /bin/sh -c を介して実行します。
⚠ 最初にお読みください — 重複識別子
この脆弱性は、この CVE ID が存在する以前からすでに公開されていました。 これは CVE-2026-3484 / GHSA-xc68-rrqc-qgq3 によって カバーされており、VulDB によって割り当てられ、2026-03-03 に
mcp-nmap-server <= 1.0.1に対して公開されました — 同一パッケージ、同一の CWE-78child_process.execシンクです。CVE-2026-52616 は、独立した報告に応じて 2026-07-13 に MITRE CNA-LR によって s1ko に 割り当てられました。この割り当ては重複であると考えられ、そのようにフラグが立てられています。 引用すべきは、既存の識別子 CVE-2026-3484 です。
このリポジトリは、完全性のために、また重複を文書化するために公開されているものであり、 新規の発見を主張するものではありません。元の公開開示に対するクレジットは s1ko のものでは ありません。
| 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 = 8.4 High (stdio トランスポート)。AV:N → ネットワークトランスポートでラップされた場合は 9.8 Critical。 |
| 独立報告者 | s1ko (github.com/s1ko, [email protected]) |
| CVE 割り当て | 2026-07-13、MITRE CNA-LR |
これを重複排除する際に留意すべき命名の罠: npm パッケージは mcp-nmap-server であり、リポジトリは nmap-mcp-server です。この 2 つの順序は同じプロジェクトを指しています。
MCP ツールの引数は攻撃者の影響を受けます。それらはエージェントが処理するコンテンツ — ドキュメント、Web ページ、ツール出力 — から LLM によって生成されるため、間接的なプロンプトインジェクションによって攻撃者がツールハンドラが受け取る値を制御できるようになります。それらの値のいずれかをシェルに渡すハンドラは、その影響を MCP サーバーを実行しているホスト上でのコード実行に変えてしまいます。これは先例のケース aws-mcp-server / CVE-2026-5058 と同じモデルです。
dist/index.js — ターゲットはコマンド文字列に追加され、その後 exec に渡されます:
command += ` ${target}`;
…
const { stdout, stderr } = await promisify(exec)(command);
child_process.exec は引数を /bin/sh -c で実行するため、呼び出し元が寄与したものはすべてシェル構文になります。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 を話します。サーバーを初期化し、注入された target を指定して run_nmap_scan の tools/call を1回発行し、マーカーファイルをチェックします。ペイロードは無害な 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 で始まり、区切り文字の後に2つ目のコマンドを含む sh -c プロセス — アプリケーションのログ記録に依存しないプロセスツリーのシグナル(auditd、eBPF、Falco、EDR)。nmap は想定内ですが、シェル、インタプリタ、ネットワーククライアントは想定外です。target または additionalFlags にシェルのメタ文字が含まれる MCP ツール呼び出しログ。target は IP、CIDR、またはホスト名にのみ一致すべきです。MITRE ATT&CK T1059.004 Command and Scripting Interpreter: Unix Shell。
リポジトリはアーカイブ済みで読み取り専用であり、npm の最新版は影響を受ける 1.0.1 で、修正版リリースは公開されません。削除が緩和策です:
target を IP/CIDR/ホスト名のパターンに対して検証し、
additionalFlags をコマンド文字列に到達する前に許可リスト化してください。フォークする人向けの修正は、exec 用の文字列を構築する代わりに、
引数ベクターを指定して execFile("nmap", [...args]) を呼び出すことです。
根本的な要件は、Zod の型検証だけでなく、コンテンツの検証です。
NIST SP 800-53r5 SI-10;OWASP ASVS v4 §5.3.8;CWE-78 緩和策 M1 および M2。
| 日付 | 出来事 |
|---|---|
| 2026-03-03 | CVE-2026-3484 / GHSA-xc68-rrqc-qgq3 が VulDB により公開 — 別の報告者による最初の公開開示 |
| 2026-05-29 | 公開された tarball のソースレビューにより独立して特定、3月の勧告は認識していなかった |
| 2026-06-01 | 隔離されたコンテナ内で MCP stdio 経由で動的に検証 |
| 2026-06-13 | 提出前の重複排除中に重複を特定;リポジトリがアーカイブ済みで Private Vulnerability Reporting が利用不可であることを確認。内部判定:提出しない |
| 2026-07-13 | MITRE CNA-LR がそれにもかかわらず CVE-2026-52616 を割り当て、s1ko を発見者としてクレジット |
| 2026-08-22 | 本記事を公開、重複を文書化 |
aws-mcp-server)同じ調査パスからの関連勧告: CVE-2026-52617、 CVE-2026-52618。
MIT — LICENSE を参照してください。