Die Webseite schrieb die Konfiguration des Agenten um
Am 21. Juli 2026 legten Intezer und Kodem Security CVE-2026-10591 offen: eine ganz gewöhnlich aussehende Dokumentationsseite trug Anweisungen in ein Pixel großem weißem Text, und als ein Entwickler den Kiro-Agenten von AWS bat, sie zu lesen, nutzte Kiro sein eigenes Dateischreib-Werkzeug, um ohne jede Freigabe die Konfiguration zu überschreiben, die seine MCP-Server startet, lud die Datei dann neu und führte den Code des Angreifers auf dem Host mit den Rechten des Entwicklers aus. AWS fügte eine Freigabeaufforderung hinzu. Was bleibt, ist, dass der Agent, das Web, das er liest, und die Maschine des Entwicklers eine einzige Vertrauenszone waren. Bromure Agentic Coding setzt einen Hypervisor dazwischen.
Ein Entwickler bat Kiro, eine Dokumentationsseite zu lesen. Die Seite enthielt einen Satz, gemalt in ein Pixel großem weißem Text, geschrieben für das Modell, nicht für das Auge. Ihm folgend schrieb Kiro die Datei um, die entscheidet, welche Programme es startet, und startete dann eines. Nichts daran erforderte einen Klick.
Kiro ist die agentische IDE von AWS: ein Coding-Agent, der das offene Web in
Ihrem Namen liest, Dokumentation abruft und Werkzeuge für Sie verdrahtet. Wie
die meisten Agenten im Jahr 2026 spricht es das Model Context Protocol, oder
MCP: der Stecker, der einem Coding-Agenten erlaubt, externe Werkzeuge
aufzurufen und ihre Ergebnisse zu lesen. Kiro hält seine Liste der MCP-Server,
und den genauen Befehl zum Starten jedes einzelnen, in einer einfachen Datei
unter ~/.kiro/settings/mcp.json. Wenn sich diese Datei ändert, lädt Kiro sie
neu und startet, was auch immer sie nun beschreibt.
Dieser letzte Satz ist die ganze Schwachstelle. Die Datei ist ein Starter, und der Agent kann in sie schreiben.
Am 21. Juli 2026 zeigte Intezer, in einer Untersuchung mit Kodem Security, die Kette, die folgt, und The Hacker News berichtete noch am selben Tag darüber. AWS vergab CVE-2026-10591, bewertet mit 8,8 von 10. Frühere Teile desselben Problems waren bereits von Johann Rehberger und von Cymulate gemeldet worden. Was Intezer hinzufügte, war die Zustellung.
Eine Seite, die Sie lesen, keine Datei, die Sie geöffnet haben
Die Anweisungen kamen nicht in einem Repository oder einer Konfiguration an,
der der Entwickler zu vertrauen wählte. Sie kamen auf einer Webseite an.
Intezer pflanzte sie in ein Pixel großem weißem Text, color:#fff;font-size:1px,
auf eine ansonsten gewöhnliche API-Dokumentationsseite. In einem Browser
rendert der Absatz als nichts: ein leerer Streifen, an dem ein Mensch beim
Scrollen vorbeigleitet. Für den Agenten, der den Text der Seite statt ihres
Bildes aufnimmt, ist es ein klarer Absatz mit Anweisungen.
Diese Anweisungen sagten Kiro, fsWrite, sein eigenes Dateischreib-Werkzeug,
zu verwenden, um ~/.kiro/settings/mcp.json mit einem vom Angreifer gelieferten
Eintrag zu überschreiben. Kiro tat es, ohne zu fragen. Sein Standardmodus
Autopilot schrieb die Datei von selbst, ohne Dialog und ohne „Diesen
Schreibvorgang erlauben?“-Aufforderung. Das Neuladen löste aus, Kiro startete
den Befehl aus dem neuen Eintrag, und der Code des Angreifers lief auf dem Host
mit den Rechten des Entwicklers: genug, um Anmeldedaten zu lesen, Quellcode zu
kopieren, Persistenz zu installieren oder sich seitwärts in alles zu bewegen,
was die Maschine des Entwicklers erreichen kann.
AWS fügte eine Aufforderung hinzu. Die Maschine bleibt die Beute.
Der Fix ist der vernünftige. AWS markiert nun mcp.json, .vscode/tasks.json,
das .git-Verzeichnis und andere ausführungssensible Dateien als geschützte
Pfade: in eine davon zu schreiben erfordert ausdrückliche Freigabe, im
Autopilot- wie im Supervised-Modus gleichermaßen. Der Freigabeschritt, der
fehlte, ist nun da. Wenn Sie Kiro nutzen, aktualisieren Sie es.
Was der Fix nicht ändert, ist die Form des Raums. AWS sagte es beim Abschluss: ein Mensch in der Schleife wirkt nur dann als Kontrolle, wenn ihm der Schritt gezeigt wird, der zählt, und wenn die Plattform die Linie hält, selbst nachdem das Modell vollständig dazu überredet wurde, sie zu überschreiten. Das sind zwei Forderungen. Die Aufforderung erfüllt die erste: sie bringt den Schreibvorgang zum Vorschein. Sie kann die zweite nicht erfüllen, denn wenn der Code läuft, läuft er auf der eigenen Maschine des Entwicklers, mit seiner eigenen Reichweite. Eine Freigabe, die Sie an einem müden Nachmittag wegklicken, oder eine Freigabe, die die nächste raffinierte Seite so zu formulieren lernt, dass sie routiniert wirkt, bringt Sie an denselben Ort: der Code des Angreifers, der dort ausgeführt wird, wo Ihre Schlüssel, Ihre Repositories und Ihre Cloud-Sitzungen leben.
Die wiederkehrende Form hier — eine Seite, die der Agent las, eine Konfiguration, die er schreiben konnte, ein Start, den er auslösen konnte — ist nicht spezifisch für Kiro. So sieht ein Agent aus, der das offene Web liest und Dateien auf einer Maschine voller Geheimnisse bearbeitet. Die dauerhafte Frage ist, wo der Agent läuft und was um ihn herum ist, wenn die Aufforderung versagt.
Wo Bromure dieselben Schritte ausführt
Bromure Agentic Coding versucht nicht, den Agenten dazu zu bringen, der Seite zu misstrauen, den Schreibvorgang zu verweigern oder den Klick abzufangen. Es ändert die Maschine, auf der die ganze Sequenz läuft. Der Agent jedes Profils läuft in einer wegwerfbaren Linux-VM auf Apple Silicon, einen Hypervisor von macOS entfernt. Führen Sie die exakte CVE-2026-10591-Kette dort aus, und jeder Schritt löst trotzdem aus, und jeder Schritt landet woanders.
Die Seite wird gelesen. Die Injektion gewinnt. Kiros Stellvertreter schreibt
mcp.json um, das Neuladen löst aus, der Befehl des Angreifers startet „mit den
Rechten des Entwicklers“. Nur ist der Entwickler in der VM der Benutzer
ubuntu in einer Wegwerf-Box, und die Box enthält nichts, was die Reise wert
wäre. Der Code sucht nach den Anmeldedaten, die den Angriff lohnend machen —
den Anthropic-Schlüssel, die AWS-Schlüssel, das GitHub-Token — und findet Köder.
In Bromure gelangen die echten Geheimnisse nie in die VM; ein
Anmeldedaten-Broker auf dem Host injiziert
Platzhalter wie brm_…, eine synthetische kubeconfig und einen
Wegwerf-SSH-Schlüssel und setzt den echten Wert erst an der Netzwerkgrenze ein,
bei Anfragen an Ziele, die Sie freigegeben haben. Quellcode-Diebstahl erreicht
nur die Ordner, die Sie einzubinden gewählt haben. „Seitwärtsbewegung in
interne Systeme“ erreicht die profilspezifische VM-Firewall.
Dann ist da die ausgehende Hälfte. Einen Köder zu stehlen zahlt sich nur aus, wenn Sie ihn irgendwohin senden können, und Seitwärtsbewegung bedeutet, einen zweiten Host zu erreichen. Beides sind Netzwerkaktionen, und in Bromure durchqueren beide den Host-Proxy, wo das wahre Ziel einer Anfrage auf dem Weg nach draußen gefiltert wird und wo die zerstörerische Form einer Aktion — ein delete, ein drop oder ein terminate gegen die Cloud- und Git-APIs, die das Profil bereitstellt — auf ein Schutzgeländer trifft, das sie ablehnen kann, egal wozu der Agent überredet wurde. Was auch immer der gestartete Code versucht, hinterlässt eine protokollierte Zeile in der Sitzungsspur.
Und eine Schicht sitzt vor all dem, aus einem Grund, der genau zu diesem
Angriff passt. Bromure bewertet die nicht vertrauenswürdigen Inhalte, die ein
Agent liest — eine abgerufene Seite oder eine Werkzeugantwort — mit einem
Injektionsdetektor auf dem Gerät,
bevor das Modell darauf reagiert. Der Grund, warum Ein-Pixel-Text funktioniert,
ist, dass ein Mensch die gerenderte Seite liest. Der Klassifikator nicht; er
liest denselben rohen Strom, den das Modell liest, wo color:#fff;font-size:1px
nichts verbirgt. Der Trick, der den Absatz für ein Auge unsichtbar macht, macht
für einen Bewerter, der die Bytes liest, keinen Unterschied. Er fängt das meiste
davon ab, und eine hinreichend neuartige Tarnung kann einem einzelnen Detektor
noch entgehen, deshalb sitzt er vor der Wegwerf-Box, statt sie zu ersetzen.
Das Web ist jetzt die nicht vertrauenswürdige Eingabe
Jahrelang lautete der Rat für Coding-Agenten, vorsichtig zu sein, welchen Repositories man vertraut. Kiro treibt die Lektion voran: die gefährliche Eingabe war eine Dokumentationsseite, die Art, die ein Agent hundertmal am Tag liest, und die Waffe war eine CSS-Eigenschaft, die ein Browser seit den 1990er-Jahren ehrt. Da immer mehr des Entwicklungs-Workflows über Agenten läuft, die das offene Web lesen, ist jede Seite eine nicht vertrauenswürdige Eingabe, und sie sorgfältiger zu lesen behebt das nicht.
Die Aufforderung, die AWS hinzufügte, ist der richtige Patch, und er sollte ausgeliefert werden. Aber eine Kontrolle, die davon abhängt, dass ein Mensch den einen Schreibvorgang erwischt, der zählt, auf jeder Seite, für immer, ist eine Kontrolle mit schlechter Langzeitbilanz. Bromure Agentic Coding bittet den Agenten nicht, vorsichtig mit dem Web zu sein. Es nimmt an, dass die Seite gewinnt, die Konfiguration umgeschrieben wird und der Code läuft, und es sorgt dafür, dass all dies, wenn es geschieht, in einer Box geschieht, in der es nichts zu holen und keinen Heimweg gibt. Das ist der Unterschied zwischen einer Aufforderung, an der man vorbeireden kann, und einer Linie, eine Ebene tiefer gezogen, wo das Reden aufhört zu wirken. Installieren Sie es und geben Sie Ihrem Agenten eine Maschine, die nicht Ihre ist, um sie zu verlieren.