flawopen.com/Teardowns/cve-2026-97662-aws-security-agent-mcp-git-argument-injection
CVE-2026-97662: Git-Argument-Injection im AWS Security Agent MCP
CVE-2026-97662 ermöglichte, dass eine vom Aufrufer beeinflussbare Git-Referenz in AWS-Security-Agent-MCP-Diff-Scans als Befehlsoption statt als Revision interpretiert wurde. Dadurch konnte die Workspace-Begrenzung umgangen und auf dem Host geschrieben werden. Aktualisieren Sie auf 0.2.0 oder neuer.[1], [2]
CVSS-Vektor
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:H/SC:N/SI:N/SA:NEin Mitarbeiter soll einen Ordner anhand seines Etiketts finden, akzeptiert aber ein Etikett, das mit einer Steueranweisung beginnt. Das Ablagesystem führt die Anweisung aus, statt den Ordner zu suchen. Hier konnte eine mit einem Bindestrich beginnende Git-Referenz als Option gelten. Leere und optionähnliche Referenzen vor dem Git-Aufruf abzulehnen, schließt diese Eingabestelle. Hier geht es um die Optionsauswertung durch Git, nicht um die beliebige Ausführung von Shell-Befehlen.[2]
Kernkonzepte & Begriffe
MCP-Server- Ein lokaler Prozess, der einer KI-Anwendung über das Model Context Protocol Werkzeuge bereitstellt. Werkzeugargumente gelangen als nicht vertrauenswürdige Daten in den Server.
Argument-Injection (CWE-88)- Ein Kommandozeilenprogramm interpretiert nicht vertrauenswürdige Eingaben als Option oder Trennzeichen, selbst wenn es eine Argumentliste statt eines Shell-Strings erhält.[2], [4]
Framework-Zuordnungen
- CWE-Referenz für die in diesem Leitfaden beschriebene Schwachstelle: CWE-88
- OWASP GenAI 2025 — LLM01:2025 Prompt-Injection
Ursachenanalyse
AWS beschreibt eine kontextabhängige Argument-Injection in der Diff-Scan-Operation: Eine übergebene Referenz konnte als Kommandozeilenoption statt als Git-Revision interpretiert werden. Der Upstream-PR bestätigt, dass start_diff_scan base_ref an git diff <base_ref> -- und git archive übergab; leere oder mit Bindestrich beginnende Werte konnten daher anders gedeutet werden. Das ist keine Shell-Metazeichen-Injection: Eine Argumentliste verhindert Shell-Parsing, aber das aufgerufene Programm kann weiterhin Optionen erkennen. Laut AWS konnten dadurch Dateien außerhalb des vorgesehenen Workspace erstellt, überschrieben oder gekürzt werden, soweit die Betriebssystemrechte des Prozesses reichten. Der zusammengeführte Fix prüft base_ref vor Git und weist leere Werte sowie Werte zurück, deren getrimmter Text mit - beginnt; Tests bestätigen, dass bei abgewiesenen Eingaben weder Unterprozess noch Upload startet. Betroffen sind Versionen >=0.1.1 und <0.2.0; Version 0.2.0 behebt den Fehler. Der CVE-Eintrag nennt CVSS 4.0 6,9 Mittel; der GitHub-Advisory nennt zusätzlich CVSS 3.1 8,2 Hoch. Ein Exploit-Payload wird hier nicht wiedergegeben.[1], [2], [3], [4]
Schritt-für-Schritt Angriffsablauf
Ein Agent ruft den Diff-Scan auf
Der lokale MCP-Server erhält ein vom Aufrufer beeinflusstes base_ref. Das Risiko setzt einen Ablauf voraus, in dem ein nicht vertrauenswürdiges Repository, ein Inhalt oder ein Benutzer diesen Wert beeinflussen kann; Prompt Injection erreicht diesen Codepfad nicht automatisch.[2]
Ablauf an der Grenze: Revisionsangabe und Git-Optionen
Konzeptioneller Datenfluss, keine Befehlsfolge und keine Exploit-Wiedergabe.
Zwei Parser, zwei getrennte Grenzen
- Shell-Auswertung
- Ein Argument-Array verhindert, dass die Shell den Wert als Shell-Syntax interpretiert, und schließt diese Grenze.[3]
Quellcode: Verwundbar vs. Sicher
Gezielter Vergleich der Upstream-Aufrufgrenze, keine vollständige Kopie des Scanners. Die zusammengeführte Änderung prüft die Referenz vor Git; Tests decken leere und mit Bindestrich beginnende Werte ohne Unterprozess oder Upload ab. Eine Argumentliste verhindert Shell-Parsing, aber nicht die Optionsauswertung durch Git. Dieser Ausschnitt zeigt nur den Aufruf von git diff; dieselbe Validierung muss jede Verwendung von base_ref absichern, auch bei git archive.[3]
def start_diff_scan(path: str, base_ref: str):
# Die wie eine Option wirkende Referenz erreicht Git vor der Prüfung.
return subprocess.run(
["git", "diff", base_ref, "--"],
cwd=path,
check=False,
)
def _validate_git_ref(base_ref: str) -> None:
if not base_ref or not base_ref.strip():
raise ValueError("base_ref must not be empty.")
if base_ref.strip().startswith("-"):
raise ValueError("base_ref must not start with '-'.")
def start_diff_scan(path: str, base_ref: str):
_validate_git_ref(base_ref) # Vor dem Start von Unterprozessen oder Uploads ablehnen.
return subprocess.run(
["git", "diff", base_ref, "--"],
cwd=path,
check=False,
)
Checkliste für Engineering & Systemsicherheit
- ✓Aktualisieren Sie
awslabs.security-agent-mcp-servervon Versionen 0.1.1 bis 0.1.x auf 0.2.0 oder neuer und prüfen Sie die Version des tatsächlich laufenden MCP-Prozesses.[1], [2], [6] - ✓Prüfen Sie jede von Benutzer oder Repository beeinflussbare Git-Referenz vor jedem Git-Unterprozess und weisen Sie leere oder mit Bindestrich beginnende Werte vor Uploads und anderen Nebenwirkungen ab.[2], [3]
- ✓Ergänzen Sie Tests, die belegen, dass Bindestrich- und reine Leerzeichen-Referenzen weder Unterprozesse noch Uploads oder Remote-Aufrufe auslösen; testen Sie gültige Referenzen wie
main,origin/mainundHEAD~1.[3] - ✓Verwenden Sie Argumentlisten statt Shell-Strings, validieren Sie Argumente aber zusätzlich nach der Optionsgrammatik des aufgerufenen Programms; Shell-Escaping verhindert keine Argument-Injection.[3]
- ✓Betreiben Sie lokale MCP-Server mit minimalen Dateirechten und isoliertem Workspace. Das begrenzt Auswirkungen, ersetzt aber kein Update.[1]
- ✓FlawOpen-Analyse: Verfolgen Sie bei Workflows, die nicht vertrauenswürdige Inhalte in Werkzeugargumente des Agents übernehmen, den gesamten Weg bis zum Werkzeugaufruf und erzwingen Sie Autorisierung und Validierung im MCP-Server.