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

Der Fehlerbericht führte den Befehl aus

Agentjacking, im Juni 2026 von Tenet Security offengelegt, braucht weder Schadsoftware noch Zugriff auf Ihre Infrastruktur. Ein Angreifer legt mit einem öffentlichen, nur zum Schreiben bestimmten Schlüssel einen gefälschten Fehler in Ihrem Sentry-Projekt an, versteckt darin Anweisungen und wartet. Wenn Sie Ihren Coding-Agenten bitten, das Problem zu beheben, liest er den Text des Angreifers als Anleitung und führt ihn mit Ihren Anmeldedaten aus. Tenet fand mindestens 2.388 offengelegte Projekte und eine Erfolgsquote von 85 % bei Claude Code, Cursor und Codex. Bromure Agentic Coding führt diesen gesamten Lese-und-Ausführen-Pfad in einer wegwerfbaren Linux-VM aus, bewertet den abgerufenen Text, bevor der Agent handelt, und lässt dem Anmeldedaten-Dieb nur Attrappen.

Sie haben Ihren Coding-Agenten gebeten, einen Fehler zu beheben. Er öffnete den Issue-Tracker, las das oberste Ergebnis und tat, was dort stand. Das Problem ist, dass jeder im Internet diesen Fehler hätte schreiben können — und der, den Ihr Agent las, war geschrieben, um befolgt zu werden. Keine Schadsoftware landete. Kein Server wurde durchbrochen. Ein Fehlerbericht führte einen Befehl auf Ihrer Maschine aus.

Am 12. Juni 2026 veröffentlichten die Forscher von Tenet Security — Ron Bobrov, Barak Sternberg und Nevo Poran — einen Angriff, den sie Agentjacking nennen, über die AI Safety Initiative der Cloud Security Alliance. Er nutzt weder eine Phishing-E-Mail noch ein vergiftetes Paket noch ein gestohlenes Passwort. Er nutzt einen Fehlerbericht. Genauer gesagt nutzt er die Tatsache, dass ein Coding-Agent, den man bittet, „die offenen Sentry-Issues zu beheben“, einen Fehlerbericht liest und dessen Inhalt als Anweisungen behandelt.

Der Aufbau beginnt mit etwas, das die meisten Web-Apps absichtlich herausgeben. Ein Sentry-DSN — der Schlüssel, mit dem eine Website ihre eigenen Abstürze an Sentry meldet, die Plattform zur Fehlerverfolgung — ist ein öffentliches, nur zum Schreiben bestimmtes Zugangsdatum. Es steckt im clientseitigen JavaScript der Seite, und Sentrys Ingest-Endpunkt akzeptiert absichtlich nicht authentifizierte POST-Anfragen an es. So meldet Ihr Browser-Tab einen Absturz, ohne sich anzumelden. Es bedeutet auch, dass jeder, der Ihren Seitenquelltext liest, Ereignisse an Ihr Sentry-Projekt senden kann. Tenet suchte danach und fand 71 injizierbare DSNs unter den Top-Millionen-Websites und mindestens 2.388 Organisationen mit offengelegten DSNs im gesamten Internet.

Wie ein Absturzbericht zu einem Befehl wird

Der Angreifer nimmt einen gefundenen DSN und schickt per POST ein gefälschtes Fehlerereignis an ihn. Das Ereignis sieht aus wie ein gewöhnlicher Absturz, nur dass das Nachrichtenfeld und die Kontextschlüssel in Markdown verfasst sind — Überschriften, Codeblöcke, ein Abschnitt, der sich wie eine „Lösung“ liest — so formatiert, dass sie von Sentrys eigenen Diagnosevorlagen visuell und syntaktisch nicht zu unterscheiden sind. Es liegt in der Issue-Liste des Projekts wie jeder andere ungelöste Fehler.

Dann wartet der Angreifer auf Sie. Wenn ein Entwickler seinen Coding-Agenten bittet, ungelöste Sentry-Issues zu untersuchen, fragt der Agent Sentry ab — meist über den MCP-Server von Sentry, den Standard-Konnektor, der einem Agenten erlaubt, Daten aus einem externen Werkzeug abzurufen — und bekommt das Ereignis zurück. Wie Tenet es formulierte, „empfängt der Agent die Antwort und handelt danach, genau wie es ein Entwickler täte“. Die Antwort trägt kein Signal, dass ihr Inhalt von einem Angreifer statt von der Laufzeit der Anwendung selbst verfasst wurde. Die „Lösung“ sagt, man solle einen Befehl ausführen. Der Agent führt ihn aus, mit den eigenen Rechten des Entwicklers, auf der eigenen Maschine des Entwicklers.

Schritt 1 — der Angreifer platziert es (jederzeit)Angreiferliest Ihren DSNPOST falscher AbsturzIhr Sentry-ProjektEreignis = „Lösung“„dies ausführen“Schritt 2 — Sie bitten um die Behebung (später, getrennt)Der Agent„behebe dieSentry-Issues“MCP-AbfrageSentry-MCP-Servergibt das Ereignis zurückkein Hinweis auf Herkunftals Plan gelesenIhre MaschineAgent führt den Befehl ausIhre Rechte,Ihre echten TokensexfiltriertServer des AngreifersKein Phishing. Keine Malware. Jeder Schritt ist erlaubt.
Agentjacking hat zwei Hälften, die sich nie begegnen. Zuerst schickt der Angreifer per POST einen gefälschten Absturz an Ihr Sentry-Projekt über den öffentlichen Nur-Schreib-DSN, mit Befehlen, die in der Nachricht als falsche „Lösung“ versteckt sind. Später, und getrennt davon, bitten Sie Ihren Agenten, offene Issues zu beheben; er zieht das vergiftete Ereignis über Sentrys MCP-Server, liest die Lösung als Anleitung und führt sie mit Ihren Anmeldedaten aus — und exfiltriert Tokens zum Angreifer. Der Angreifer berührt Ihre Infrastruktur nie.

Tenet meldete eine Erfolgsquote von 85 % über die getesteten Agenten hinweg — Claude Code, Cursor und Codex, die Werkzeuge, zu denen die meisten Entwickler greifen. Ihr Proof-of-Concept-Befehl zog davon mit Umgebungsvariablen, AWS-Anmeldedaten, GitHub- und GitLab-OAuth-Tokens, npm-Registry-Tokens, Docker-Konfiguration, Kubernetes-Cluster-Tokens und CI/CD-Pipeline-Geheimnissen. Sentry, am 3. Juni über die Schwachstelle informiert, weigerte sich, das zugrunde liegende Verhalten zu beheben — es sei, in ihren Worten, technisch nicht zu verteidigen — und fügte einen globalen Inhaltsfilter hinzu, der eine bestimmte Payload-Zeichenkette blockiert.

Warum jede bestehende Verteidigung direkt daran vorbeilief

Agentjacking ist nicht wegen der Raffinesse der Payload von Bedeutung, sondern weil in einem normalen Sicherheits-Stack nichts auslöst. Es gibt keine Schadsoftware auf der Festplatte, die ein Endpunkt-Agent abfangen könnte. Es gibt keine ungewöhnliche Anmeldung, die die Identitätsüberwachung melden könnte. Es gibt keine ausgehende Verbindung von einem Prozess, der keinen Grund dazu hat — der Agent soll mit Sentry sprechen, und die Anmeldedaten des Entwicklers sollen funktionieren. Jeder Schritt in der Kette ist eine erlaubte Aktion, ausgeführt mit legitimem Zugriff. Wie Tenet es formulierte, verletzt der Angriff keine Richtlinie und überschreitet keine Anomalie-Schwelle.

Das ist dieselbe Wand, gegen die der Rest der agentischen Sicherheit immer wieder läuft. Eine Befehls-Sperrliste verliert gegen die Shell, die den Befehl umschreibt. Ein Arbeitsbereich, dem Sie vertrauten, verliert gegen die Server, die er still startet. Eine Sicherheitsprüfung, die der Agent für Sie durchführt, wird zu dem, was Sie angreift. Agentjacking ist die Version, bei der die vergiftete Eingabe über ein Werkzeug ankommt, dem Sie zu Recht vertrauten, und Daten trägt, die Sie aus gutem Grund gelesen haben. Der MCP-Server von Sentry hat seine Arbeit perfekt gemacht. Das Problem ist, dass „hole den Fehler und handle danach“ und „hole die Anweisungen des Angreifers und handle danach“ für den Agenten derselbe Satz sind.

Tenets eigene Empfehlungen weisen auf die Form der Lösung hin: den Agenten in einer Sandbox mit eingeschränktem Netzwerkausgang ausführen, alles, was ein MCP-Server zurückgibt, als potenziell feindliche Eingabe behandeln und aufhören, eine abgerufene Zeichenkette ohne Grenze dazwischen zu einem Befehl werden zu lassen. Das beschreibt eine Architektur, keinen Patch.

Wo Bromure die Grenze zieht

Bromure Agentic Coding versucht nicht, dem Agenten beizubringen, welchen Fehlerberichten er glauben soll. Es ändert, was ein geglaubter erreichen kann. Jeder Agent, den Bromure ausführt — Claude Code, Codex, Grok Build — läuft in einer wegwerfbaren Linux-VM auf Ihrem Mac, nicht auf macOS selbst. Wenn der Agent also das vergiftete Sentry-Ereignis zieht und genau das tut, was Tenet diese Agenten tun sah, sind mehrere Dinge bereits wahr.

Erstens, der abgerufene Text wird von einem Detektor gelesen, bevor er zu einem Plan wird. Agentjacking ist ein Leseangriff, bevor es ein Ausführungsangriff ist: Der ganze Exploit hängt davon ab, dass der Agent die „Lösung“ des Angreifers aufnimmt und als Anleitung behandelt. Das ist genau die nicht vertrauenswürdige Autorität, die Bromure überwacht — dieselbe Klasse wie eine bösartige CLAUDE.md oder eine vergiftete AGENTS.md. Bromures Prompt-Injection-Erkennung auf dem Gerät bewertet den Inhalt, den der Agent liest, gegen lokale Modelle, die den Mac nie verlassen, plus einen deterministischen Scanner für unsichtbare Unicode-Tricks. Ein Absturzbericht, dessen „Behebung“ ein Shell-Befehl ist, der Ihre Tokens liest, ist genau der Fall, für dessen Meldung dieser Detektor existiert.

Zweitens, der Befehl läuft in einer Box, die Sie wegwerfen. Angenommen, der Köder ist gut genug formuliert, um am Bewerter vorbeizukommen, und der Befehl läuft. Er läuft in der VM. Der „persistente Hintertürzugang“ in Tenets Bedrohungsmodell hat nichts, worauf er bestehen bleiben könnte: Setzen Sie das Profil auf die Basis zurück, und das abgelegte Skript, der hinzugefügte SSH-Schlüssel, der geplante Job — alles ist weg. Nichts, was der Befehl tat, überlebt das Schließen des Fensters.

Drittens, es gibt keine echten Anmeldedaten zu stehlen. Die gesamte Beuteliste aus dem Proof-of-Concept — AWS-Schlüssel, GitHub- und GitLab-Tokens, npm- und Docker-Anmeldedaten, Kubernetes- und CI/CD-Geheimnisse, Umgebungsvariablen — ist genau das, was Bromure von vornherein aus der Box heraushält. Bromure injiziert Platzhalterwerte (brm_…, eine synthetische ~/.kube/config, wegwerfbare Cloud- und Registry-Tokens) in die VM und tauscht die echten nur auf dem Host zurück, im Proxy, auf dem Weg hinaus zur echten API. Der Befehl durchsucht Umgebung und Festplatte und findet Attrappen. Was auch immer er an den Server des Angreifers schickt, ist ein Sack Zeichenketten, die sich nirgends authentifizieren.

Viertens, die Exfiltration ist sichtbar. Tenets Angriff endet damit, dass die gestohlenen Tokens die Maschine verlassen. Bromure leitet den Verkehr der VM durch einen Host-Proxy, sodass die Verbindung zum Server des Angreifers im Sicherheitsprotokoll als ausgehender Verkehr erscheint, den Sie sehen können — kein stiller Rückruf von einem Laptop, den Sie für sauber hielten. Der „eingeschränkte Netzwerkausgang“, den Tenet empfiehlt, ist der Ort, an dem der Agent bereits lebt.

Wegwerfbare Linux-VMVergiftetes Ereignisder Agent ruft abdie „Lösung“InjektionsdetektorBewertung auf dem Gerätbewertet vor AusführungWas der Befehl stehlen würdeAWS_SECRET = brm_9f2a… (unecht)GitHub / npm / kube = AttrappenBox setzt sich danach zurückExfil (protokoll.)Angreifer bekommt AttrappenStrings, die nirgends öffnenEchte Geheimnissebleiben auf dem Host-Proxyauf der Leitung getauschtDer Bericht kommt an und der Agent liest ihn. Nur an einem wegwerfbaren Ort, mit unechten Schlüsseln.
Derselbe gefälschte Bericht, derselbe Abruf, derselbe Befehl — andere Maschine. In Bromure läuft der Agent auf einer wegwerfbaren Linux-VM: Die vergiftete „Lösung“ wird von einem Detektor auf dem Gerät bewertet, bevor sie zu einem Plan wird, der Befehl läuft an einem wegwerfbaren Ort, die Tokens, die er durchsucht, sind Attrappen, die nur auf dem Host-Proxy gegen die echten getauscht werden, und die Exfiltration wird protokolliert. Der Bericht kommt trotzdem an. Es gibt nichts, was sich zu nehmen lohnt.

Worum dies eine Grenze zieht

Isolierung und Bewertung sind Eindämmung, keine Heilung für einen vertrauensseligen Agenten. Es lohnt sich, genau zu sein, was Bromure hier ändert und was nicht.

Der Bericht kommt trotzdem an

Bromure repariert Sentrys DSN-Design nicht und hindert einen Angreifer nicht daran, einen vergifteten Absturz anzulegen — dieser öffentliche Nur-Schreib-Schlüssel ist die Grenze, die Sentry ziehen müsste, und sie haben es abgelehnt. Was Bromure ändert, ist, was passiert, nachdem der Agent den Bericht gelesen hat: wo der Befehl läuft und was er erreichen kann.

Erkennung ist ein Netz, keine Wand

Die Injektionsbewertung auf dem Gerät meldet eine „dies zur Behebung ausführen“-Lösung öfter als nicht, aber ein sorgfältiger Autor kann einen Köder so formulieren, dass er an einem einzelnen Scanner vorbeikommt. Behandeln Sie den Detektor als eine Schicht; die Eindämmung — eine wegwerfbare Box mit unechten Schlüsseln und protokolliertem Ausgang — ist das, was hält, wenn ein Detektor versagt.

Ersetzung deckt die Geheimnisse ab, die Sie konfigurieren

Der Attrappen-Tausch schützt Anmeldedaten, die Sie in ein Profil legen: Modellschlüssel, Git- und Cloud-Tokens, Registry- und Cluster-Tokens, SSH-Schlüssel. Ein Token, das ein Skript während des Laufs auf die Festplatte schreibt, oder eine Sitzung, die Sie von Hand in der Box aufbauen, ist nur Daten. Halten Sie Geheimnisse im Broker, nicht im Arbeitsbereich.

Isolierung ist kein Grund, alles automatisch auszuführen

Eine wegwerfbare VM verkleinert den Explosionsradius; sie macht die Prüfung nicht überflüssig. Für Aktionen, die über die Box hinausreichen — einen Pull Request öffnen, zu einem Remote pushen — verdient der Bestätigungsschritt weiterhin seinen Platz. Eindämmung senkt den Einsatz eines Fehlers; sie löscht ihn nicht.

Tenets Erkenntnis ist nicht, dass eine Plattform einen Fehler hat. Es ist, dass der Vertrauensmechanismus darunter — ein Agent, der eine abgerufene Zeichenkette als Tatsache und eine „Lösung“ als Plan behandelt — von jedem Werkzeug geteilt wird, das einen Agenten mit der Außenwelt verbindet, und er wird in diesem Quartal nicht gepatcht. Sentry ist der Bote; der nächste wird ein Jira-Ticket sein, ein Linear-Kommentar, ein von einem Fremden hinterlassenes Code-Review. Ihr Agent wird etwas lesen, das ein Angreifer geschrieben hat, und bei einer Erfolgsquote von 85 % wird er manchmal tun, was dort steht. Die Frage ist nicht, ob er jemals getäuscht wird. Die Frage ist, was läuft, wenn es passiert: Ihre Maschine, Ihre echten Tokens und ein Standbein, das bleibt — oder eine Linux-Box, die Sie wegwerfen können, mit Attrappen darin und dem Ausgang im Protokoll. Bromure macht es zum Zweiten.