MCP-Befehlsinjektion

MCP-Befehlsinjektion

Ein Semikolon in einem Tool-Argument wird zu einem Shell-Befehl.

Was ist MCP-Befehlsinjektion?

Ein MCP-Tool läuft auf einem Server, sodass jedes empfangene Argument eine nicht vertrauenswürdige Eingabe ist. Erstellen Sie einen Shell-Befehl, indem Sie diese Eingabe in eine Zeichenfolge einfügen und ein Semikolon oder Backtick keine Daten mehr sind: Es wird zu einem Befehl, den Ihr Server ausführt. Sie finden das eingefügte Argument in einem Agenten-Trace, beobachten, wie das Tool ein gewöhnliches leeres Ergebnis zurückgibt, während eine Root-Reverse-Shell Datenbankanmeldeinformationen ausführt, und rufen dann git direkt ohne Shell im Pfad auf. Eine Codekorrektur macht Code, der bereits ausgeführt wurde, nicht rückgängig.

Was Sie lernen in MCP-Befehlsinjektion

MCP-Befehlsinjektion — Trainingsschritte

  1. Ein Tool, das Git ausführt

    Sarnholt leitet einen öffentlichen Repo-Assistenten. Eines seiner Tools, commit_search, sucht nach Commits nach Autor. Bob weiß nicht, wie es geschrieben ist, aber ein Tool, das Git anhand eines von ihm angegebenen Namens durchsucht, ist eine Prüfung wert. Er öffnet den gleichen Agenten, den jeder verwenden kann.

  2. Sehen Sie, wie es funktioniert

    Zuerst eine normale Anfrage, um zu erfahren, was das Tool mit dem ihm gegebenen Namen macht.

  3. Der Name landet irgendwo

    Der von ihm eingegebene Autor kommt als Git-Abfrage zurück. Git ist ein Befehlszeilentool, daher wird dieser Name mit ziemlicher Sicherheit irgendwo auf dem Server in einen Git-Befehl eingefügt. Wenn es dort als Text abgelegt wird, kann Bob den Befehl ergänzen.

  4. Schließen Sie das Argument und fügen Sie einen Befehl hinzu

    Bob bittet um Zusagen eines Autors, dessen Name kein Name ist. Er beendet den Git-Befehl mit einem Semikolon und hängt sein eigenes an: Holt ein Skript von seinem Host und führt es aus.

  5. Die langweilige Antwort verbarg den Schaden

    Die Antwort des Assistenten ist unauffällig: Es wurden keine Commits gefunden. Das ist der Punkt. Der eingefügte Befehl meldet sich nicht über das Tool zurück, sondern läuft unbemerkt auf dem Server.

  6. Eine Shell auf dem Server

    Das von Bobs Server zurückgegebene Skript öffnete eine direkte Verbindung zu seinem Zuhörer. Er wechselt dorthin, um zu sehen, was ihm ein commit_search-Aufruf gebracht hat.

  7. Warum es funktioniert hat

    Das Tool hat genau das getan, was sein Code vorgab. Die Frage ist, was in diesem Code ein Argument in einen Befehl verwandelt hat.

  8. Eine Hülle, wo keine sein sollte

    Alice wird vom Sicherheitsteam angepiept. Bei der Warnung geht es nicht um eine Anmeldung oder eine Datei, sondern um einen Prozess.

  9. Was der Alarm anzeigt

    Die Warnung hat es auf ein Tool und eine Eingabeform eingegrenzt.

  10. Der Ruf in der Spur

    Der Agent zeichnet jeden Werkzeugaufruf auf. Der Vergiftete ist darin.

Abdeckung der Sicherheits-Frameworks

OWASP MCP Top 10

  • MCP05:2025 Command Injection & Execution

CWE

  • CWE-78 Improper Neutralization of Special Elements used in an OS Command

CIS Controls

  • CIS 16 Application Software Security

NIST CSF

  • PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
  • PR.PS Platform Security