Die Blockade war die Zustellung
Auf der DEF CON 34 hat Tenet Security diese Woche einen Angriff gezeigt, der mit einer Anfrage beginnt, die Ihre Firewall garantiert abweist. Genau der 403 ist der Punkt: Die WAF schreibt die blockierte Anfrage wortwörtlich ins Sicherheitsprotokoll, und Tage später liest ein Coding-Agent dieses Protokoll, um die 403er zu debuggen, und befolgt die Anweisungen darin. Kein Schritt der Kette ist unautorisiert. Bromure Agentic Coding bewertet den Text beim Eintreffen und hält die Zugangsdaten, die der gekaperte Agent braucht, aus der Maschine heraus, auf der er läuft.
Die Firewall hat funktioniert. Sie hat die Regel getroffen, einen 403 zurückgegeben und die abgewiesene Anfrage ins Protokoll geschrieben, genau wie vorgesehen. Dieser Protokolleintrag ist der Weg, auf dem die Payload den Coding-Agenten erreicht hat.
Die DEF CON 34 ist heute Morgen in Las Vegas zu Ende gegangen. Am Freitag hielten Barak Sternberg, Nevo Poran und Ron Bobrov von Tenet Security einen Vortrag, dessen Titel zugleich das Argument ist: Your WAF Blocked Us, That Was The Exploit. Im Programm heißt es dazu „Remote Agent Takeover via Cloudflare, Sentry and Claude Zero-Day for data exfil“. Die zusammenfassende Berichterstattung erschien am 8. August.
Dasselbe Team taufte im Juni Agentjacking, nachdem es gezeigt hatte, dass ein gefälschter Sentry-Fehlerbericht, über MCP abgerufen, einen Coding-Agenten in 85 % der Versuche dazu brachte, angreiferkontrollierten Code auszuführen, über mehr als hundert produktive Instanzen hinweg. Der Vortrag vom Freitag dehnt das auf Sentrys eigenen Agenten Seer aus, dessen vergiftete Empfehlungen dann stromabwärts nach Cursor fließen. Die Cloudflare-Kette ist das neue Material.
Der 403 ist der Punkt
Beginnen Sie beim Problem des Angreifers. Er kommt an Ihren Coding-Agenten nicht heran. Der läuft auf dem Rechner einer Entwicklerin, hinter allem, was Ihnen gehört, und der Angreifer hat keine Zugangsdaten, keine Sitzung und keinen Weg hinein.
Also schickt er eine Anfrage, die abgewiesen werden soll.
Die WAF trifft eine Managed Rule und gibt 403 zurück. Sie erledigt außerdem die andere Hälfte ihrer Aufgabe und schreibt die blockierte Anfrage samt Payload ins Sicherheits-Eventlog. Ein Protokolleintrag ohne die Payload wäre für die Analystin, für die er existiert, wertlos.
Tage später fällt jemandem auf, dass der Endpunkt 403er wirft, und bittet den
Agenten, sich das anzusehen. Der Agent ruft Cloudflares
Observability-MCP-Server auf, einen der
offiziellen Server, die Cloudflare dafür veröffentlicht,
und holt die Zeilen der blockierten Anfragen. Der Text des Angreifers trifft in
einem tool_result-Block ein, von einem Erstanbieterdienst, den die
Entwicklerin selbst angebunden hat, unter einem Feld, das bedeutet dies ist
eine Anfrage, die wir abgelehnt haben.
Der Agent liest ihn als Anweisungen. Dann nutzt er seine eigenen autorisierten Cloudflare-Werkzeuge, um DNS-Einträge umzuschreiben und Kundenverkehr umzuleiten. Tenet beziffert die Exposition auf über 15.000 Organisationen, darunter 27 % der Fortune 1000.
Nichts Unautorisiertes passiert
Tenet nennt das Muster die Authorized Intent Chain, und der Juni-Text formuliert die Konsequenz:
Gehen Sie die Kette noch einmal durch und suchen Sie den Schritt, auf den Sie alarmieren würden. Die Entwicklerin hat den Agenten autorisiert. Der Agent wurde mit dem MCP-Server konfiguriert. Der MCP-Server hat Protokolle abgefragt, für deren Abfrage er gedacht ist. Das genutzte Konto trägt die DNS-Berechtigung, die Sie ihm mit Absicht gegeben haben. Und die Anfrage, die alles ausgelöst hat, wurde blockiert. Jede Kontrolle auf dem Weg hat genau das getan, wofür sie gekauft wurde, und die Komposition dieser korrekten Verhaltensweisen ist der Angriff.
Alles, was funktioniert, indem es fragt wer tut das und darf er das, wird an jedem Sprung mit ja antworten, weil die Antwort ja lautet. Zwei Züge bleiben: den Text auf seinem Weg hinein lesen, und die Durchsetzung dorthin legen, wo der gekaperte Agent sie nicht erreicht.
Den Text beim Eintreffen bewerten
Bromure Agentic Coding führt den Agenten in einer wegwerfbaren Linux-VM auf Apple Silicon aus und leitet jedes Byte seines Verkehrs durch einen Proxy auf dem Host, außerhalb der Box, in der der Agent läuft. Das schließt den Modellverkehr ein, und genau dort werden Protokollzeilen zu Anweisungen.
Werkzeugausgaben treffen nicht vertrauenswürdig ein
Bromure bewertet die Inhalte, die der Agent liest, einschließlich
Dateiinhalten, Webseiten und der tool_result-Blöcke, die von MCP-Servern
und Shell-Befehlen zurückkommen, mit einem lokalen
Prompt-Injection-Modell. Dieser Detektor sucht genau danach: nach einer
Protokollzeile, die einen Imperativ an ihre Leserin trägt. Er bewertet die
Passage selbst, deshalb bringt es der Payload nichts, dass Cloudflare sie
über eine Verbindung liefert, die Sie eingerichtet haben.
Sie entscheiden, was eine Erkennung bewirkt
Log and continue schreibt jeden Treffer ins Security-Log-Fenster und lässt die Anfrage durch. Ask me what to do hält die ausgehende Anfrage an und zeigt Ihnen den markierten Text, damit Sie mit dem Satz vor Augen entscheiden. Block stoppt einseitig, bevor das Modell liest, und der Agent bekommt einen harten 451, den er als API-Fehler meldet.
Autoritätsdateien bekommen einen eigenen Klassifikator
Config-Poisoning war die andere Hälfte der DEF-CON-Veröffentlichung. Ein
feinabgestimmter ModernBERT-Klassifikator bewertet die Dateien, die ein
Agent als Daueranweisung behandelt, CLAUDE.md und AGENTS.md und
GROK.md samt ihrer verschachtelten und globalen Varianten, daneben ein
deterministischer Scanner für die Payloads aus Zero-Width-, Bidi- und
Unicode-Tag-Zeichen, die kein Modell lesen kann.
Es bleibt auf Ihrem Mac
Beide Detektoren laufen auf dem Gerät, aus Modellen, die Sie einmal von bromure.io herunterladen. Ihre Produktions-WAF-Protokolle auf eingeschleuste Anweisungen zu prüfen, heißt nicht, Ihre Produktions-WAF-Protokolle irgendwohin zu schicken.
Der Schreibzugriff braucht einen Schlüssel, der nicht in der Maschine ist
Angenommen, eine Payload kommt trotzdem durch. Am Ende dieser Kette steht ein API-Aufruf, der einen DNS-Eintrag ändert, und dieser Aufruf braucht Zugangsdaten.
In einem Bromure-Profil sind sie nicht da, um genommen zu werden. Ein
Cloudflare-Token kommt als Other API keys-Eintrag hinein, wodurch ein
falscher brm_…-Wert erzeugt und unter dem Umgebungsvariablennamen Ihrer Wahl
in die VM exportiert wird. Das echte Token bleibt auf dem Host, und der Proxy
setzt es auf der Leitung ein, bei ausgehenden Anfragen an den einen Zielhost,
an den Sie es gebunden haben. Der Prozess des Agenten hält es nie. Eine Dotfile
oder eine Shell-History auch nicht.
Schalten Sie Require approval to use für diesen Eintrag ein, und jede Ersetzung wirft einen Dialog auf macOS auf, außerhalb der VM, bevor Bromure den echten Wert weiterreicht. Ein gekaperter Agent kann ein wohlgeformtes DNS-Update zusammenstellen, und er kann den Dialog nicht beantworten.
Für den restlichen Wirkungsradius gibt es eine strengere Antwort. Guardrails ist eine Policy-Engine, die im Host-Proxy läuft und destruktive Operationen aus den Protokollen entfernt, die der Agent spricht: Kubernetes, AWS, DigitalOcean, Container-Registries, GitHub, GitLab, Bitbucket und die HTTPS-Datenbankendpunkte. Wählen Sie pro Ressource Block destructive oder Read-only, und ein blockierter Aufruf kommt als harter 403 zurück. Weil der Host diese Entscheidung trifft, hat ein Agent, der drinnen in der VM den Anweisungen eines Fremden folgt, nichts zum Abschalten.
Ein Sandbox-Bug verschiebt keinen Hypervisor
Der Vortrag legte außerdem einen Claude-Zero-Day offen, der die Netzwerk-Sandbox des Agenten für vollständige Datenexfiltration umgeht, dazu agentische Rootkits, zusammengesetzt aus Memory-Injection und Config-Poisoning, die kein EDR aufgreift. Beide Befunde zeigen auf dieselbe Schwachstelle: Die Eingrenzung, die ein Agent mitbringt, ist von innen erreichbar.
Bromure legt die Grenze woandershin. Die Grenze ist eine virtuelle Maschine, die auf Apples Hypervisor mit eigenem Kernel hinter NAT läuft, wobei jedes Paket einen Proxy passiert, der auf macOS läuft. Ein Defekt in der In-Process-Sandbox des Agenten ist ein Defekt innerhalb der VM. Er verschiebt die VM nicht, und er verschafft Code in der VM keine Route ins Netz, die den Host-Proxy auslässt.
Und wenn doch etwas dort landet, landet es auf einer Maschine, die zum
Wegwerfen gebaut ist. Erase home wischt /home/ubuntu, also Dotfiles,
.ssh, npm-global, .cargo und Shell-History, und setzt es auf den Zustand
nach dem Klonen zurück. Reset to base verwirft jede Änderung auf
Systemebene und klont die Arbeitsdisk neu aus dem Basis-Image. Das Rootkit, das
kein Scanner findet, sitzt weiterhin in einer Disk-Schicht, die Sie löschen
können.
Die unsichtbare Kette, aufgeschrieben
Tenets stärkste Beobachtung ist, dass sich die Kette in aller Öffentlichkeit versteckt, weil jeder Schritt darin legitim ist. Es gibt keine Signatur und keine Anomalie zum Korrelieren.
Bromure versucht gar nicht erst, eine zu korrelieren. Jede Anfrage, die die VM stellt, passiert den Host-Proxy, und Bromure hält Host, Status, Latenz und die eingesetzten Zugangsdaten fest. Injection-Erkennungen landen im Security Log mit dem markierten Text im Anhang. Erhöhen Sie die Trace-Stufe, und Bromure behält auch die Bodies der KI-Anfragen, verschlüsselt mit demselben Keychain-Schlüssel wie Ihre Profilgeheimnisse.
Sie dürfen dann eine andere Frage stellen: Was hat diese Sitzung angefasst? Ein Agent, der den Nachmittag mit dem Lesen von Cloudflare-Protokollen verbracht und dann seinen allerersten Aufruf an die DNS-API gemacht hat, sind zwei Zeilen, die Sie lesen können, auf der Maschine, auf der die Sitzung lief, ohne Agent zum Ausrollen und ohne SIEM zum Weiterleiten.
Cloudflare wird die eigene Oberfläche nachziehen, Sentry die seine, und die beiden Ketten aus dem Freitagsvortrag werden sich schließen. Paaren Sie irgendein System, das feindliche Eingaben aufzeichnet, mit irgendeinem Agenten, der Aufzeichnungen liest, um seine Arbeit zu tun, und Sie haben diesen Angriff aus zwei Teilen nachgebaut, die beide ihre Arbeit tun. Sie führen Protokolle, damit jemand sie liest, und diese Leserin ist inzwischen ein Programm, das auf das Gefundene hin handelt.
Ein Instinkt deckt das ab: Behandeln Sie alles, was der Agent liest, als etwas, das ein Fremder geschrieben haben könnte, einschließlich der Teile, die Ihre eigenen Abwehrmechanismen aufgeschrieben haben.
Installieren Sie Bromure Agentic Coding, und setzen Sie zwischen Protokoll und Agent etwas, das den Text prüft.