MCP-opdrachtinjectie

MCP-opdrachtinjectie

Een puntkomma in een toolargument wordt een shell-opdracht.

Wat is MCP-opdrachtinjectie?

Een MCP-tool draait op een server, dus elk argument dat het ontvangt is niet-vertrouwde invoer. Bouw een shell-opdracht door die invoer in een tekenreeks te plakken en een puntkomma of backtick is niet langer gegevens: het wordt een opdracht die uw server uitvoert. Je vindt het geïnjecteerde argument in een agenttrace, ziet hoe de tool een gewoon leeg resultaat retourneert terwijl een root reverse shell databasegegevens uitvoert, en roept vervolgens git rechtstreeks aan zonder shell in het pad. Een codefix maakt code die al is uitgevoerd niet ongedaan.

Wat je leert in MCP-opdrachtinjectie

MCP-opdrachtinjectie — Trainingsstappen

  1. Een tool die Git draait

    Sarnholt leidt een openbare repo-assistent. Een van de tools, commit_search, zoekt commits op auteur. Bob weet niet hoe het geschreven is, maar een tool die git zoekt op de naam die hij opgeeft is het onderzoeken waard. Hij opent dezelfde agent die iedereen kan gebruiken.

  2. Zie het werken

    Eerst een normaal verzoek, om te leren wat de tool doet met de naam die hij krijgt.

  3. De naam eindigt ergens

    De auteur die hij typt komt terug als een git-query. Git is een commandoregelprogramma, dus ergens op de server wordt die naam vrijwel zeker in een git-commando gezet. Als het daar als tekst wordt geplaatst, kan Bob iets aan het commando toevoegen.

  4. Sluit het argument en voeg een opdracht toe

    Bob vraagt om commits van een auteur wiens naam geen naam is. Het beëindigt het git-commando met een puntkomma en voegt zijn eigen commando toe: haal een script op van zijn host en voer het uit.

  5. Het saaie antwoord verborg de schade

    Het antwoord van de assistent is onopvallend: er zijn geen commits gematcht. Dat is het punt. Het geïnjecteerde commando rapporteert niet terug via de tool, het draait stil op de server.

  6. Een shell op de server

    Het script dat de server van Bob teruggaf, opende rechtstreeks een verbinding met zijn luisteraar. Hij schakelt ernaar toe om te zien wat een commit_search-oproep hem heeft opgeleverd.

  7. Waarom het werkte

    De tool deed precies wat de code zei te doen. De vraag is wat in die code een argument in een commando veranderde.

  8. Een omhulsel waar er geen zou moeten zijn

    Alice wordt opgeroepen door het beveiligingsteam. De waarschuwing gaat niet over een login of een bestand, maar over een proces.

  9. Wat de waarschuwing vastlegt

    De waarschuwing heeft het beperkt tot één hulpmiddel en één vorm van invoer.

  10. De oproep in het spoor

    De agent houdt elke gereedschapsoproep bij. De vergiftigde zit erin.

Dekking van beveiligingsframeworks

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