Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/s1ko/cve-2026-52618
SchwachstellenanalyseExploitationKI-Sicherheit
GitHubs1ko/cve-2026-52618

CVE-2026-52618

Dokumentiert CVE-2026-52618 mit einem PoC für OS-Befehlsinjektion in @webfer/mcp-ansible-drupal über executeDeployment extraVars, plus Erkennungshinweise und Gegenmaßnahmen.

Repository anzeigen
vor 1 TagNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-52618 — @webfer/mcp-ansible-drupal: OS-Befehlsinjektion über executeDeployment-extraVars

spawn(cmd[0], cmd.slice(1), { shell: true }) fügt ein Argument-Array ohne Escaping wieder zu einer einzigen /bin/sh -c-Zeichenkette zusammen, sodass ein Shell-Metazeichen in einem extraVars-Wert, der an das MCP-Tool executeDeployment übergeben wird, auf dem Host ausgeführt wird, auf dem der Server läuft.

Dieses Problem ist behoben. Aktualisieren Sie auf 2.0.3 oder neuer.

Bedrohungsmodell

MCP-Tool-Argumente sind vom Angreifer beeinflussbar. Sie werden von einem LLM aus dem Inhalt erzeugt, den der Agent verarbeitet — Dokumente, Webseiten, Tool-Ausgaben —, sodass indirekte Prompt-Injektion einen Angreifer in die Lage versetzt, die Werte zu kontrollieren, die ein Tool-Handler empfängt. 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.

Die Konsequenz ist, dass „der Aufrufer ist ein vertrauenswürdiges LLM“ keine Gegenmaßnahme darstellt. Tool-Argumente sind nicht vertrauenswürdige Eingaben.

Ausführung

src/helpers/runAnsible.ts in 2.0.0 baute ein Argument-Array auf und führte es dann mit aktivierter Shell aus:

root@kitploit:~
const proc = spawn(ansibleCmd[0], ansibleCmd.slice(1), { shell: true });

Mit shell: true führt Node ansibleCmd[0] nicht mit den übrigen Elementen als argv aus. Es verbindet das gesamte Array zu einer einzigen Zeichenkette und übergibt sie an /bin/sh -c, ohne die Elemente zu quoten oder zu escapen. Jedes Element, das ;, &&, |, Backticks oder $() enthält, bricht daher aus dem beabsichtigten Befehl aus.

Der erreichbare Pfad ist das MCP-Tool executeDeployment (src/tools/executeDeployment.ts), das vom Aufrufer gelieferte extraVars als --extra-vars key=value in das Array einfügt. Ein Wert von ; touch /tmp/marker ; ergibt:

root@kitploit:~
/bin/sh -c "ansible-playbook -i inv.ini play.yml ... --extra-vars deploy_env=; touch /tmp/marker ; echo INJECTED"

Eine sekundäre Senke in derselben Version interpolierte projectRoot in execSync('ansible-vault encrypt ' + vaultPath).

Reproduktion

poc/driver.mjs ruft runAnsible direkt mit einem präparierten extraVars-Wert auf und prüft auf die Markierungsdatei. ansible-playbook muss nicht installiert sein — der injizierte Befehl wird in derselben /bin/sh -c-Zeichenkette ausgeführt, unabhängig davon, ob das führende Binary gefunden wird.

root@kitploit:~
npm pack @webfer/[email protected] && tar xf webfer-mcp-ansible-drupal-2.0.0.tgz
node poc/driver.mjs

Erwartet auf einer betroffenen Version:

root@kitploit:~
{"target":"@webfer/mcp-ansible-drupal 2.0.0","sink":"runAnsible -> spawn(cmd[0], cmd.slice(1), {shell:true})","vector":"executeDeployment extraVars value","marker":"/tmp/PWNED_ansible","created":true,"verdict":"CONFIRMED - command injection executed"}

Validiert am 2026-06-01 in einem isolierten Container und erneut validiert am 2026-06-13 mit einem harmlosen touch-Marker. Führen Sie dies nur gegen Infrastruktur aus, für deren Test Sie autorisiert sind.

Erkennung

  • Jeder --extra-vars-Wert, der ansible-playbook erreicht und ;, &&, ||, |, ein Backtick oder $( enthält. Legitime Ansible-Variablenwerte tun dies praktisch nie.
  • Ein sh -c-Prozess, dessen Befehlszeile ansible-playbook und einen zweiten Befehl nach einem Trennzeichen enthält — ein Prozessbaum-Signal (auditd, eBPF, Falco, EDR), das nicht von der Anwendungsprotokollierung abhängt.
  • Unerwartete Kindprozesse des MCP-Server-Prozesses. ansible-playbook, git und ansible-vault sind zu erwarten; eine Shell, ein Interpreter oder ein Netzwerk-Client nicht.
  • MCP-Toolaufruf-Protokolle, in denen executeDeployment-Argumente Shell-Metazeichen enthalten. Protokollieren Sie Tool-Argumente — die meisten MCP-Bereitstellungen tun dies nicht; es ist die einzige Stelle, an der der injizierte Wert aus Anwendungssicht sichtbar ist.

MITRE ATT&CK T1059.004 Command and Scripting Interpreter: Unix Shell.

Gegenmaßnahmen

Aktualisieren Sie auf @webfer/mcp-ansible-drupal 2.0.3 oder neuer. Der aktuelle Quellcode ruft spawn(ansibleCmd[0], ansibleCmd.slice(1), { … }) ohne shell-Option auf, sodass das Array als argv übergeben wird und Metazeichen ihre Bedeutung verlieren.

Die allgemeine Regel für MCP-Tool-Handler — und was der Fix hier umsetzt:

  • Aktivieren Sie niemals shell: true, wenn bereits ein Argument-Array vorhanden ist. Die Array-Form existiert genau dazu, die Shell zu vermeiden.
  • Erstellen Sie niemals einen Befehl durch String-Interpolation eines Tool-Arguments. Verwenden Sie execFile/spawn mit einem expliziten Argumentvektor.
  • Validieren Sie Inhalt, nicht nur Typ. Ein Zod-z.string() beweist, dass der Wert eine Zeichenkette ist, sagt aber nichts darüber aus, was darin steht. Nutzen Sie eine Allowlist, wenn die Wertmenge bekannt ist; lehnen Sie Shell-Metazeichen ab, wenn sie nicht bekannt ist.
  • Führen Sie den MCP-Server als unprivilegierter Benutzer mit der engstmöglichen Dateisystem- und Netzerreichweite aus, die das Tool tatsächlich benötigt.

NIST SP 800-53r5 SI-10; OWASP ASVS v4 §5.3.8; CWE-78-Gegenmaßnahmen M1 und M2.

Zeitverlauf

DatumEreignis

Referenzen

  • npm-Paket — https://www.npmjs.com/package/@webfer/mcp-ansible-drupal
  • Repository — https://github.com/webfer/MCP-Ansible-Drupal
  • Präzedenzfall für das MCP-Bedrohungsmodell — CVE-2026-5058 (aws-mcp-server)

Begleitende Advisories aus derselben Forschungsreihe: CVE-2026-52616, CVE-2026-52617.

Lizenz

MIT — siehe LICENSE.

Tool herunterladen
CVECVE-2026-52618
CWECWE-78 (Improper Neutralization of Special Elements used in an OS Command)
Paket@webfer/mcp-ansible-drupal (npm)
Betroffen2.0.0
Behoben in2.0.3 (veröffentlicht am 2026-06-01)
CVSS v3.1AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 7.8 High (Stdio-Transport). AV:N → 9.8 Critical, wenn der Server in einen Netzwerktransport eingebettet ist.
Gemeldet vons1ko (github.com/s1ko, [email protected])
CVE zugewiesen2026-07-13, MITRE CNA-LR
2026-06-01Schwachstelle dynamisch gegen 2.0.0 validiert
2026-06-012.0.3 auf npm veröffentlicht, mit entferntem shell: true
2026-06-13Auf einem zweiten Host erneut validiert
2026-07-13MITRE CNA-LR weist CVE-2026-52618 zu; s1ko als Entdecker genannt
2026-08-22Veröffentlichung dieses Berichts