
Advisory und gutartiger PoC für eine OS-Befehlsinjektion in einem nmap-MCP-Server, inklusive Tracking doppelter CVE-Einträge, Erkennungshinweisen und Gegenmaßnahmen.
run_nmap_scanDas MCP-Tool run_nmap_scan erstellt seinen Befehl durch String-Interpolation der
Parameter target und additionalFlags und führt ihn über
child_process.exec aus, d. h. /bin/sh -c.
⚠ Zuerst lesen — doppelter Bezeichner
Diese Schwachstelle war bereits öffentlich, bevor diese CVE-ID existierte. Sie wird abgedeckt durch CVE-2026-3484 / GHSA-xc68-rrqc-qgq3, vergeben von VulDB und veröffentlicht am 2026-03-03 gegen
mcp-nmap-server <= 1.0.1— dasselbe Paket, dieselbe CWE-78-child_process.exec-Senke.CVE-2026-52616 wurde am 2026-07-13 von MITRE CNA-LR an s1ko vergeben, als Reaktion auf einen unabhängigen Bericht. Diese Vergabe scheint ein Duplikat zu sein, und sie wurde als solches gekennzeichnet. Der bereits existierende Bezeichner CVE-2026-3484 ist derjenige, der zitiert werden sollte.
Dieses Repository wird zur Vollständigkeit und zur Dokumentation des Duplikats veröffentlicht, nicht als Anspruch auf eine neuartige Entdeckung. Die Anerkennung für die ursprüngliche öffentliche Offenlegung gebührt nicht s1ko.
| CVE | CVE-2026-52616 — Duplikat von CVE-2026-3484 |
| CWE | CWE-78 (Improper Neutralization of Special Elements used in an OS Command) |
| Paket | mcp-nmap-server (npm) |
| Betroffen | 1.0.1 und früher — alle veröffentlichten Versionen |
| Behoben in | keine — Repository archiviert |
| CVSS v3.1 | AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 8.4 High (stdio-Transport). AV:N → 9.8 Critical, wenn der Server in einen Netzwerk-Transport eingebettet wird. |
| Unabhängig gemeldet von | s1ko (github.com/s1ko, [email protected]) |
| CVE vergeben | 2026-07-13, MITRE CNA-LR |
Eine erwähnenswerte Namensfalle für alle, die dies deduplizieren: Das npm-Paket heißt
mcp-nmap-server und das Repository heißt nmap-mcp-server. Die beiden Reihenfolgen
beziehen sich auf dasselbe Projekt.
MCP-Tool-Argumente werden vom Angreifer beeinflusst. Sie werden von einem LLM aus
dem Inhalt erzeugt, den der Agent verarbeitet — Dokumente, Webseiten, Tool-Ausgaben —, sodass
indirekte Prompt-Injection einen Angreifer in die Lage versetzt, die Werte zu kontrollieren, die ein Tool-
Handler erhält. Ein Handler, der einen dieser Werte in eine Shell einspeist, verwandelt
diesen Einfluss in Codeausführung auf dem Host, auf dem der MCP-Server läuft. Dies ist
dasselbe Modell wie im Präzedenzfall aws-mcp-server / CVE-2026-5058.
dist/index.js — das Ziel wird an eine Befehlszeichenkette angehängt, die dann
an exec übergeben wird:
command += ` ${target}`;
…
const { stdout, stderr } = await promisify(exec)(command);
child_process.exec führt sein Argument in /bin/sh -c aus, sodass alles, was der Aufrufer beigesteuert hat, Shell-Syntax ist. Das Zod-Eingabeschema deklariert z.string(), was den Typ validiert und nichts über den Inhalt aussagt, sodass Metazeichen durchgelangen. additionalFlags erreicht denselben String auf demselben Weg.
Ein run_nmap_scan-Aufruf mit target auf
127.0.0.1; touch /tmp/marker; echo INJECTED gesetzt, erzeugt:
/bin/sh -c "nmap … 127.0.0.1; touch /tmp/marker; echo INJECTED"
poc/driver.mjs spricht MCP über stdio: Es initialisiert den
Server, sendet einen tools/call für run_nmap_scan mit einem injizierten target
und prüft auf eine Marker-Datei. Die Payload ist ein harmloses touch.
npm pack [email protected]
tar xf mcp-nmap-server-1.0.1.tgz && cd package && npm install
node ../poc/driver.mjs
Auf einer betroffenen Version wird Folgendes erwartet:
==== POC RESULT (mcp-nmap-server) ====
marker /tmp/PWNED_nmap created: true
verdict: CONFIRMED — command injection executed
nmap muss nicht installiert sein — der injizierte Befehl läuft unabhängig davon, ob die führende Binärdatei aufgelöst wird, in derselben /bin/sh -c-Zeichenkette.
Validiert am 2026-06-01 in einem isolierten Container und erneut validiert am 2026-06-13.
Führe ihn nur gegen Infrastruktur aus, für deren Test du autorisiert bist.
nmap-Kommandozeile, die ;, &&, ||, |, einen Backtick oder $( enthält.sh -c-Prozess, dessen Kommandozeile mit nmap beginnt und nach einem Trennzeichen einen zweiten Befehl enthält — ein Prozessbaum-Signal (auditd, eBPF, Falco, EDR), das nicht von Anwendungs-Logging abhängt.nmap ist zu erwarten; eine Shell, ein Interpreter oder ein Netzwerk-Client nicht.target oder additionalFlags Shell-Metazeichen enthalten. Ein target sollte auf eine IP, ein CIDR oder einen Hostnamen passen und auf nichts anderes.MITRE ATT&CK T1059.004 Command and Scripting Interpreter: Unix Shell.
Das Repository ist archiviert und schreibgeschützt, die neueste npm-Version ist die betroffene 1.0.1, und es wird keine gepatchte Version veröffentlicht. Die Entfernung ist die Gegenmaßnahme:
target gegen ein IP/CIDR/Hostname-Muster
zu validieren und additionalFlags per Allowlist zuzulassen, bevor eines von beiden die
Befehlszeichenkette erreicht.Die Behebung für alle, die ihn forken, besteht darin,
execFile("nmap", [...args]) mit einem Argumentvektor aufzurufen, statt eine
Zeichenkette für exec zu bauen. Inhaltsvalidierung, nicht nur Zod-Typvalidierung, ist die
zugrunde liegende Anforderung.
NIST SP 800-53r5 SI-10; OWASP ASVS v4 §5.3.8; CWE-78 Gegenmaßnahmen M1 und M2.
| Datum | Ereignis |
|---|---|
| 2026-03-03 | CVE-2026-3484 / GHSA-xc68-rrqc-qgq3 von VulDB veröffentlicht — die ursprüngliche öffentliche Offenlegung durch einen anderen Melder |
| 2026-05-29 | Unabhängig durch Quellcode-Review des veröffentlichten Tarballs identifiziert, ohne Kenntnis des März-Advisorys |
| 2026-06-01 | Dynamisch über MCP stdio in einem isolierten Container validiert |
| 2026-06-13 | Duplikat während der Deduplizierung vor der Einreichung identifiziert; Repository als archiviert bestätigt, Private Vulnerability Reporting nicht verfügbar. Internes Urteil: nicht einreichen |
| 2026-07-13 | MITRE CNA-LR weist dennoch CVE-2026-52616 zu und nennt s1ko als Entdecker |
| 2026-08-22 | Diese Ausarbeitung veröffentlicht, die das Duplikat dokumentiert |
aws-mcp-server)Begleitende Advisorys aus demselben Recherchedurchgang: CVE-2026-52617, CVE-2026-52618.
MIT — siehe LICENSE.