
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 のものではありません。
この重複を解決しようとする人にとって注意に値する命名の罠: 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 に対して 1 回の 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 で始まり、セパレータの後に 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 の latest は影響を受ける 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。
aws-mcp-server)同じ調査パスからの関連アドバイザリ: CVE-2026-52617, CVE-2026-52618。
MIT — LICENSE を参照してください。
| CVE | CVE-2026-52616 — CVE-2026-3484 の重複 |
| CWE | CWE-78 (OS コマンドに使用される特殊要素の不適切な無害化) |
| Package | mcp-nmap-server (npm) |
| Affected | 1.0.1 以前 — 公開済みの全バージョン |
| Fixed in | なし — リポジトリはアーカイブ済み |
| CVSS v3.1 | AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 7.8 High (stdio トランスポート)。サーバーがネットワーク トランスポートにラップされている場合、AV:N → 9.8 Critical。 |
| Independently reported by | s1ko (github.com/s1ko, [email protected]) |
| CVE assigned | 2026-07-13, MITRE CNA-LR |
| 日付 | 出来事 |
|---|
| 2026-03-03 | CVE-2026-3484 / GHSA-xc68-rrqc-qgq3 が VulDB によって公開 — 別の報告者による最初の公開開示 |
| 2026-05-29 | 3月のアドバイザリを知らずに、公開された tarball のソースレビューによって独立に特定 |
| 2026-06-01 | 隔離されたコンテナ内の MCP stdio 上で動的に検証 |
| 2026-06-13 | 重複は提出前の重複排除中に特定。リポジトリがアーカイブ済みで Private Vulnerability Reporting が利用できないことを確認。内部判断: 申請しない |
| 2026-07-13 | MITRE CNA-LR はそれにもかかわらず CVE-2026-52616 を割り当て、発見者として s1ko をクレジット |
| 2026-08-22 | この記事を公開し、重複を記録 |