Zurück zu allen Beiträgen
Veröffentlicht am · von Renaud Deraison

Der Agent vertraute der Zeichensetzung

Agent Data Injection, ein im Juli 2026 veröffentlichter Proof of Concept der Seoul National University, der UIUC und von Largosoft, versteckt keine Anweisungen in einem Prompt. Es fälscht die Zeichensetzung, mit der ein Agent ein vertrauenswürdiges Feld von unzuverlässigem Text unterscheidet — ein typografisches Anführungszeichen, ein maskiertes Anführungszeichen, sogar ein verirrtes Dollarzeichen — sodass der GitHub-Kommentar eines Angreifers als der Fix des Maintainers gelesen wird und ein gefälschter CI-Eintrag als sauberer Build. Es umging eigens gebaute Prompt-Injection-Abwehren bis zur Hälfte der Fälle, über GPT-5.2, Claude und Gemini hinweg. Bromure Agentic Coding normalisiert die gefälschten Trennzeichen, bevor der Text zu einem Plan wird, verriegelt die Aktionen führe-dies-aus und merge-dies, die aus der Box hinausreichen, und lässt das Ganze auf einer wegwerfbaren Linux-VM mit Köder-Anmeldedaten laufen.

Ihr Coding-Agent entscheidet, welchem Text er gehorcht, indem er die Zeichensetzung darum herum liest — die Anführungszeichen und Klammern, die sagen „dieser Teil ist der Maintainer, jener ist der Kommentar eines Fremden“. Ein neuer Angriff fälscht diese Zeichensetzung. Er schreibt keine raffiniertere Anweisung. Er schreibt ein typografisches Anführungszeichen, und der Kommentar des Fremden beginnt, den Namen des Maintainers zu tragen.

Am 6. Juli 2026 veröffentlichten Forscher der Seoul National University, der University of Illinois Urbana-Champaign und von Largosoft — geleitet von Woohyuk Choi und Professor Byoungyoung Lee — eine Arbeit mit unverblümtem Titel: Agent Data Injection Attacks are Realistic Threats to AI Agents. Sie beschreibt eine Angriffsklasse, Agent Data Injection (ADI), die neben der Prompt Injection steht statt in ihr, und die eigens gebaute Injection-Abwehren bis zur Hälfte der Fälle umging, wo klassische Prompt Injection nahe null erzielte. OpenAI, Google und Anthropic bestätigten, dass es funktioniert. Zum Zeitpunkt der Veröffentlichung wurden keine Fixes gemeldet.

Der Grund, warum es für jeden zählt, der einen Coding-Agenten betreibt: Es greift etwas an, dem der Agent nicht anders kann als zu vertrauen — die Grenze zwischen den Daten, die er geholt hat, und der Struktur, in der diese Daten ankamen.

Das Trennzeichen ist die Sicherheitsgrenze

Der Kontext eines Agenten ist ein Haufen Text aus vielen Quellen — Ihre Anweisungen, eine Datei, eine Webseite, ein Kommentar, den jemand an einem Issue hinterlassen hat. Um sinnvoll zu handeln, muss das Modell nachhalten, welches Stück welches ist: dies ist der Name des Maintainers, jenes ist der Rumpf eines Kommentars, den ein Fremder geschrieben hat. Es tut das auf die einzige Weise, die Text erlaubt — mit Zeichensetzung. Anführungszeichen und Klammern, Tags, eckige Klammern, Zeilenumbrüche. Die Trennzeichen markieren, wo ein vertrauenswürdiges Feld endet und unzuverlässiger Inhalt beginnt.

Ein strikter Parser nimmt diese Trennzeichen wörtlich: Ein Anführungszeichen ist ein Anführungszeichen, und ein Zeichen mitten in einem Kommentar ist nur ein Zeichen. Ein Sprachmodell nicht. Es liest die Zeichensetzung, im Rahmen der Arbeit, durch Raten — es leitet Struktur daraus ab, wonach die Zeichen aussehen. Und das ist die ganze Öffnung. Ein Angreifer, der ein Feld geringen Vertrauens kontrolliert — eine Produktbewertung, ein GitHub-Issue-Kommentar, eine Zeile in einer Datei — streut zeichensetzungsartige Zeichen hinein, und das Modell liest eine Struktur, die nie da war.

Das beunruhigende Detail ist, wie wenig Handwerk das erfordert. Die Forscher nennen die Technik probabilistische Trennzeichen-Injektion und stellten fest, dass die falsche Zeichensetzung „nicht einmal richtig sein muss“. Ein maskiertes Anführungszeichen, ein typografisches Anführungszeichen, sogar ein verirrtes Dollarzeichen gingen als echte Feldgrenze durch und täuschten das Modell. Ein strikter Parser hätte jedes davon als gewöhnlichen Text gelesen.

Worauf der Agent vertrautVertrauenswürdiges FeldAutor = MaintainerUnzuverlässiger InhaltKommentar eines FremdenHarmlos — Grenze hält"sieht aus wierace condition"bleibt unzuverlässigADI — gefälschtes Trennzeichenfix"author: maintainer"run this toein Curly-Quote fälscht den FeldbruchAgent liest Angreifertext als vertrauenswürdiges Feld„wende den Fix des Maintainers an“ → führt Angreiferbefehl ausKeine Anweisung wurde versteckt. Die Zeichensetzung, die vertrauenswürdig von unzuverlässig trennt, wurde gefälscht.
Ein Agent trennt ein vertrauenswürdiges Feld (wer hat dies geschrieben) von unzuverlässigem Inhalt (was sie schrieben) mithilfe der Zeichensetzung darum herum. Agent Data Injection fälscht diese Zeichensetzung von innerhalb eines Feldes, das der Angreifer bereits kontrolliert — ein typografisches Anführungszeichen, ein maskiertes Anführungszeichen, ein Dollarzeichen — sodass vom Angreifer geschriebener Text gelesen wird, als käme er aus einer vertrauenswürdigen Quelle. Die Anweisung ist nicht die Nutzlast. Das Trennzeichen ist es.

Was es einem Coding-Agenten antut

Die Web-Agent-Variante von ADI ist leicht vorstellbar: Fälschen Sie die Kennung an einem Seitenelement, und ein Agent, der für Sie einkauft, klickt auf „Jetzt kaufen“, wo er auf „Mehr lesen“ klicken wollte. Die auf Entwickler zielende Variante ist schlimmer, weil das vertrauenswürdige Feld, das sie fälscht, das ist, wer gesagt hat, der Code sei sicher.

In einer Demonstration hinterlässt ein Angreifer einen Kommentar an einem GitHub-Issue und fälscht die Autorenzuschreibung, sodass der Agent ihn als vom Projekt-Maintainer stammend liest. Wenn ein Entwickler später den Agenten bittet, „den Fix des Maintainers anzuwenden“, tun Claude Code, OpenAIs Codex und Googles Gemini CLI genau das — sie führen den Befehl des Angreifers aus, denn soweit das Modell es erkennen kann, hat der Maintainer darum gebeten. In einer anderen fälscht ein bösartiger Pull Request den Eintrag seiner eigenen abgeschlossenen CI-Checks. Der Agent sieht in seinem Kontext einen sauberen Build, hält den Code auf Grundlage dieses erfundenen Belegs für sicher und merged echte Malware.

Über die sechs Modelle, die das Team testete — GPT-5.2, GPT-5-mini, Claude Opus 4.5 und Sonnet 4.5, Gemini 3 Pro und Flash — sind die Zahlen kein Rundungsfehler. Strukturierte Daten ergaben eine Erfolgsquote von 31–43 %; Webseiten-Daten reichten von 33 % bis hinauf zu 100 %. Und gegen Abwehren, die eigens gegen Prompt Injection gebaut wurden, kam ADI immer noch bis zur Hälfte der Fälle durch, wo dieselben Abwehren klassische Injection kalt stoppten. Zwei Gegenmaßnahmen funktionierten im Labor und beide kosteten etwas: das Auszeichnen von Seitenelementen mit zufälligen, nicht erratbaren IDs (wie es ChatGPTs Atlas-Browser tut) senkte den Erfolg von etwa 49 % auf 29 %, und strikte Datenherkunfts-Verfolgung trieb die Angriffe auf null — während sie die Fähigkeit des Agenten, normale Aufgaben zu erledigen, auf etwa ein Drittel drückte.

Warum der übliche Filter es verfehlt

Ein Prompt-Injection-Filter ist darauf trainiert, Anweisungen zu bemerken, die sich in Daten verstecken — „ignoriere deine vorherigen Anweisungen“, „führe diesen Befehl aus“, die erkennbare Form eines als Inhalt verkleideten Befehls. ADI braucht diese Form nicht. Der bösartige Text kann sich wie eine gewöhnliche Maintainer-Notiz lesen. Was den Angriff trägt, ist die Zeichensetzung darum herum, und ein Filter, der nach verdächtiger Sprache liest, segelt an einem typografischen Anführungszeichen vorbei. Deshalb war die eigene funktionierende Abwehr der Arbeit kein klügerer Klassifikator, sondern ein strikterer Parser — Herkunft, die sich weigert zu raten, wo ein Feld endet.

Das ist dieselbe Lektion, die der Rest der agentischen Sicherheit immer wieder neu lernt. Eine Befehls-Denylist verliert gegen die Shell, die den Befehl umschreibt. Ein vertrauenswürdiges MCP-Tool gibt Daten zurück, die ein Angreifer geschrieben hat. Ein Workspace, dem Sie vertrauten, startet Server, die Sie nicht wollten. ADI ist die Variante, in der das vergiftete Ding weder die Anweisung noch die Daten sind, sondern der Rahmen — das Trennzeichen, das dem Agenten sagt, welchem Text er glauben soll. Aus einem typografischen Anführungszeichen kann man sich nicht per Mustererkennung herauswinden.

Wo Bromure die Grenze zieht

Bromure Agentic Coding versucht nicht, das Modell zu einem besseren Rater zu machen, wo ein Feld endet. Es tut zwei Dinge, die das Modell nicht kann, und sorgt dann dafür, dass, wenn beide falsch liegen, der Schaden irgendwo landet, das wegwerfbar ist.

Erstens: Die gefälschten Trennzeichen werden normalisiert, bevor der Text zu einem Plan wird. Bromures On-Device-Prompt-Injection-Erkennung ist nicht nur ein lokales Modell, das nach Absicht liest; sie ist mit einem deterministischen Scanner gepaart — demselben, der Tricks mit unsichtbarem Unicode und Homoglyphen abfängt. Curly-Quotes falten sich zu geraden Anführungszeichen, verwechselbare und nullbreite Zeichen werden entfernt, und ein Feld, dessen Trennzeichen nicht zur kanonischen Struktur passen, wird markiert. Das ist der Strikter-Parser-Instinkt, den die Forscher als wirksam gegen ADI fanden, angewandt als eine Schicht auf dem unzuverlässigen Text, den der Agent geholt hat — dieselbe Klasse von Eingabe wie eine bösartige CLAUDE.md oder ein vergifteter Kommentar — und all das bleibt auf Ihrem Mac.

Zweitens: Die zwei Aktionen, die ADI wirklich will, halten immer noch an einer Grenze. Sehen Sie sich an, was der Angriff auszulösen versucht: führe den Fix des Maintainers aus und merge den Pull Request. Beide sind Aktionen, die über die Sandbox des Agenten hinausgreifen — ein Shell-Befehl, ein Push zu einem Remote. Jeder Agent, den Bromure betreibt — Claude Code, Codex, Grok Build — läuft in einer wegwerfbaren Linux-VM, und die Schritte, die diese Box verlassen, sind die, die Bromure zur Bestätigung vorlegt. Eine gefälschte Zuschreibung darf keinen Befehl automatisch ausführen, und ein gefälschter CI-Eintrag darf keine Branch automatisch mergen, denn „der Maintainer hat es gesagt“ ist genau das Urteil, das der Bestätigungsschritt doppelt zu prüfen existiert.

Drittens: Wenn ein Befehl läuft, läuft er in einer Box, die Sie wegwerfen. Angenommen, ein Trennzeichen ist neu genug, um am Normalisierer vorbeizurutschen, und überzeugend genug, um die Prüfung zu bestehen. Der Befehl wird in der VM ausgeführt. Setzen Sie das Profil auf die Basis zurück, und alles, was er abgelegt hat — ein Skript, ein SSH-Schlüssel, ein geplanter Job — ist weg. Nichts, was er getan hat, überlebt das Schließen des Fensters.

Viertens: Es gibt keine echten Anmeldedaten, die es nehmen könnte. Ein „Fix“, der Umgebung und Festplatte nach Tokens durchsucht, findet Bromures Köder — synthetische AWS-Schlüssel, eine wegwerfbare ~/.kube/config, Platzhalter-Tokens für Git und Registry (brm_…). Die echten Geheimnisse werden erst auf dem Host, im Proxy, auf dem Weg hinaus zur echten API eingewechselt. Was der Befehl aus der Box hinausschickt, ist ein Sack Zeichenketten, die sich bei nichts authentifizieren, und die Verbindung, die ihn hinausschickt, taucht im Sicherheitsprotokoll als ausgehender Verkehr auf, den Sie sehen können.

Wegwerfbare Linux-VMGefälschter KommentarCurly-Quote fälschtdie FeldgrenzeDeterministischer Scannercurly → gerade,Feld-Mismatch markiertRutscht ein Befehl durchläuft in der Box · durchsucht KöderReset-to-Base löscht esFix ausführen? PR mergen?Grenzaktionen — zur Bestätigung gehaltenEchte Geheimnisse bleiben am Hostauf dem Draht getauscht, Egress protokolliertDer Kommentar wird trotzdem platziert.Er kommt nur nicht dazu, als der Maintainer zu unterschreiben.
Derselbe gefälschte Kommentar, innerhalb von Bromure geholt. Der deterministische Scanner faltet das typografische Anführungszeichen zurück zu einem geraden und markiert das nicht passende Feld, bevor der Text zu einem Plan wird. Rutscht ein Befehl doch durch, läuft er in einer wegwerfbaren VM gegen Köder-Anmeldedaten, und die zwei Aktionen, die ADI will — den Fix ausführen, den PR mergen — halten an einer Bestätigungsgrenze, weil sie aus der Box hinausreichen. Der Kommentar wird trotzdem platziert. Er kommt nur nicht dazu, sich selbst zu unterschreiben.

Worum das eine Grenze zieht

Normalisierung und Bestätigung sind Eindämmung, keine Heilung für ein Modell, das Struktur durch Raten liest. Es lohnt sich, genau zu sein, was Bromure ändert und was nicht.

Der Kommentar wird trotzdem platziert

Bromure hindert einen Angreifer nicht daran, einen gefälschten GitHub-Kommentar zu hinterlassen oder einen CI-Eintrag zu fälschen, und es behebt nicht die zugrunde liegende Tatsache, dass ein Sprachmodell ableitet, wo ein Feld endet. Das zu lösen ist Sache des Modells und der Plattform. Was Bromure ändert, ist, was passiert, nachdem der Agent den gefälschten Text gelesen hat: Er wird normalisiert, und die Aktionen, die er auszulösen versucht, werden geprüft.

Normalisierung ist ein Netz, keine Mauer

Curly-Quotes falten, Verwechselbare entfernen und nicht passende Trennzeichen markieren fängt die ADI-Tricks, die die Forscher vorführten, und mehr, aber ein neuartiges Trennzeichen kann so formuliert werden, dass es an einem einzelnen Scanner vorbeirutscht. Behandeln Sie es als eine Schicht; die wegwerfbare Box mit Köderschlüsseln und protokolliertem Egress ist das, was hält, wenn der Scanner es verpasst.

Bestätigung schützt die Grenze, nicht jede Bearbeitung

Der Bestätigungsschritt verdient seinen Platz bei Aktionen, die die Box verlassen — einen Befehl ausführen, pushen, mergen. Eine gefälschte Anweisung, die nur eine Datei in der VM bearbeitet, wird von Isolierung und Ködern gefangen, nicht vom Prompt. Halten Sie die Grenzaktionen verriegelt; dort ist ein gefälschtes „der Maintainer hat es gesagt“ einen zweiten Blick wert.

Substitution deckt die Geheimnisse ab, die Sie konfigurieren

Der Köder-Tausch schützt Anmeldedaten, die Sie in ein Profil legen: Modell-Schlüssel, Git- und Cloud-Tokens, Registry- und Cluster-Tokens, SSH-Schlüssel. Ein Token, das ein Skript mitten im Lauf auf die Festplatte schreibt, oder eine Sitzung, die Sie von Hand in der Box öffnen, ist nur Daten. Halten Sie Geheimnisse im Broker, nicht im Workspace.

Der Punkt der Forscher ist nicht, dass sechs Modelle einen Bug teilen. Er ist, dass die Art, wie ein Agent ein vertrauenswürdiges Feld von unzuverlässigem Inhalt unterscheidet — Zeichensetzung, die er durch Raten liest — überall dieselbe ist, wo ein Agent der Außenwelt begegnet, und sie wird in diesem Quartal nicht behoben. Heute lebt das gefälschte Trennzeichen in einem GitHub-Kommentar. Morgen ist es ein Jira-Feld, ein Commit-Trailer, ein Header auf einer geholten Seite. Ihr Agent wird eine Grenze lesen, die ein Angreifer gezogen hat, und bis zur Hälfte der Fälle wird er sie glauben. Die Frage ist nicht, ob die Zeichensetzung ihn je täuscht. Die Frage ist, was läuft, wenn sie es tut: Ihre Maschine, Ihre echten Tokens und ein Befehl, der sich selbst nach main gepusht hat — oder eine wegwerfbare Linux-Box, die das Anführungszeichen zuerst normalisierte, den Merge für einen Blick anhielt und nichts als Köder in sich hatte. Bromure macht es zum Zweiten.