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.
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.
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.