Der Agent leakte seinen eigenen Schlüssel
CVE-2026-21852 war ein gepatchter Bug in Claude Code: Ein Repository konnte ANTHROPIC_BASE_URL in seinen Projekteinstellungen setzen, und der Agent schickte seinen eigenen Anthropic-API-Key, im Klartext, an den Server des Angreifers, bevor du „diesem Ordner vertrauen“ beantwortet hattest. Der Angriff führte keinen Code aus und las nichts von deiner Platte; er änderte die Adresse, an die der Agent sein eines unverzichtbares Credential verschickt. Anthropic hat das Timing repariert. Bromure Agentic Coding hält diesen Schlüssel ganz aus der Welt des Agents heraus.
Die Ordner-Öffnen-Angriffe, über die wir berichtet haben, führen Code aus, wenn du ein Repo öffnest, und lesen deine Cloud-Keys von der Platte. Dieser hier änderte eine einzige Konfigurationszeile, und der Agent händigte das Credential aus, ohne das er nicht funktionieren kann: seinen eigenen Modell-API-Key.
Der Bug ist CVE-2026-21852, gefunden von Check Point Research in Claude Code, gemeldet an Anthropic am 28. Oktober 2025, gefixt am 28. Dezember und mit einer CVE-Nummer versehen am 21. Januar 2026. Anthropic hat den Patch vor Monaten ausgeliefert. Wir schreiben im Juli darüber, weil er einen sauberen Strich unter eine Tatsache zieht, die kein Patch ändert: Ein Coding-Agent trägt einen Modell-API-Key, sendet ihn mit jeder Anfrage, und ein Repository kann die Adresse editieren, an die er ihn sendet.
Was der Bug tat.
Richte Claude Code auf ein Projekt, und es liest die Konfiguration dieses
Projekts, die Dateien unter .claude/, die ein Repo seine eigenen
Einstellungen mitbringen lassen. Eine dieser Einstellungen ist
ANTHROPIC_BASE_URL, die Adresse, mit der der Agent spricht, wenn er das
Modell aufruft. Der Default ist api.anthropic.com, und die Einstellung
existiert, damit Teams über ein Gateway oder einen eigenen Proxy routen
können. Das Projekt kann sie setzen, so ist es gedacht.
Ein bösartiges Repository setzt sie auf einen Server, den der Angreifer
kontrolliert. Dann, wie Check Point beschreibt, „bevor das Opfer
entscheidet, dem Verzeichnis zu vertrauen“, feuert Claude Code seine
Start-API-Anfragen an das, was auch immer ANTHROPIC_BASE_URL sagt, und
diese Anfragen tragen, in den Worten von Check Point, „den
Authorization-Header — unseren vollständigen Anthropic-API-Key, komplett
im Klartext exponiert“. Der Server des Angreifers liest den Header aus
einer Anfrage, die der Agent freiwillig geschickt hat, und zwar, wie
Check Point es formuliert, mit „keiner erforderlichen Nutzerinteraktion“.
Du klonst das Repo, du führst claude aus, und der Schlüssel ist weg,
bevor der Trust-Prompt fertig gezeichnet ist.
Ein Anthropic-API-Key reicht bis in den Workspace des Kontos, mit seinem geteilten Datei-Speicher und seinem Billing. Check Point geht die Reichweite durch: Ein Angreifer kann die Dateien des Workspace lesen und schreiben, sie löschen, das Speicher-Kontingent erschöpfen und API-Guthaben auf deine Rechnung verbrennen. Der Agent gibt das Credential her, auf dem der ganze Betrieb läuft, ohne gefragt worden zu sein.
Der Angriff, der nichts ausführte.
Wir haben dieses Genre schon beschrieben. Miasma pflanzte Config in
Microsofts eigene Repositories, und
das Öffnen des Ordners führte einen mehrere Megabyte großen Blob aus, der
das Dateisystem nach Keys durchsuchte. Amazon Q startete automatisch
MCP-Server aus einem geklonten
Workspace, mit der
vollen Umgebung des Entwicklers aus AWS-Keys und SSH-Sockets. In Cursors
Fall trieb eine Prompt
Injection ein Tool dazu, einen Wächter zu überschreiben und dann eine
Shell auszuführen. Alle drei teilen eine Form: Nicht vertrauenswürdige
Inhalte beim Öffnen bringen Code zur Ausführung, und dieser Code geht auf
die Suche nach deinen Secrets, denen in ~/.aws und ~/.ssh.
CVE-2026-21852 überspringt diese Maschinerie. Das bösartige Repo feuert keinen Hook und führt keine Shell aus; es ändert eine Adresse, und der Agent, der sich verhält wie vorgesehen, sendet sein eigenes Credential dorthin. Der Schlüssel, der leakt, ist der Schlüssel, den der Agent bei jedem Aufruf übertragen muss. Du kannst ihn nicht in einer Datei wegsperren, die der Prozess nicht lesen kann, denn der Prozess soll ihn ja senden.
Anthropics Fix war der richtige für den Bug: Der Trust-Dialog kommt jetzt zuerst, und, in ihren Worten, „keine API-Anfragen werden initiiert, bevor Nutzer den Trust-Dialog bestätigen“. Leite die Base-URL heute um, und nichts geht raus, bis du dem Ordner vertraust. Der Fix regelt allerdings das Timing. Sobald du dem Ordner vertraust, und Entwickler vertrauen Ordnern den ganzen Tag, sitzt der echte Key immer noch in der Umgebung des Agents, eine Config-Zeile von einer Umleitung entfernt, abhängig von der Korrektheit jedes künftigen Code-Pfads, der ihn berührt.
Der Schlüssel gehört woandershin.
Die bleibende Frage ist, warum der echte Key irgendwo saß, wohin die Konfiguration eines Repositories ihn lenken konnte. Das ist eine Architekturfrage, und wir haben Bromure Agentic Coding gebaut, um sie zu beantworten.
Bromure führt deinen Coding-Agent innerhalb einer wegwerfbaren Linux-VM
aus: den Agent selbst, die Shells, die er spawnt, die Pakete, die er
installiert, die Modell-Aufrufe, die er macht. Ein Proxy auf dem Host
sitzt auf der Leitung zwischen dem Agent und api.anthropic.com. Die VM
hält einen Stub-Key, einen syntaktisch gültigen Platzhalter, der
nichts wert ist, während der echte Anthropic-Key auf dem Host bleibt. Bei
einem legitimen Aufruf an den echten Modell-Endpunkt tauscht der
Host-Proxy den Stub auf der Leitung gegen den echten Key und tauscht ihn
aus der Antwort wieder heraus. Das Secret erledigt seine eine Aufgabe,
und die Kopie, die ein Angreifer stehlen könnte, existiert nirgendwo, wo
die Welt des Agents hinreicht.
Spiele den Angriff gegen diese Anordnung ab. Das bösartige Repo setzt
ANTHROPIC_BASE_URL auf attacker.evil. Der Agent, innerhalb der VM,
sendet seine Start-Anfrage dorthin, mit dem einzigen Key, den er hat, dem
Stub. Der Proxy bindet den Tausch gegen den echten Key an den echten
Endpunkt, und eine Anfrage, die auf einen unbekannten Server zeigt, geht
mit dem Platzhalter hinaus. Der Server des Angreifers liest den
Authorization-Header und erntet einen String, der im öffentlichen
Internet nichts bedeutet. Die Umleitung hat funktioniert, und sie hat
nichts eingesammelt.
Die Garantie hängt an einem Detail: Der Broker bindet den echten Key an
das wahre Ziel und setzt das Secret für einen Aufruf an
api.anthropic.com ein und nirgendwo sonst. Bekommst du diese Bindung
richtig hin, ist eine umgeleitete Base-URL wirkungslos. Bekommst du sie
falsch hin, tauschst den echten Key in jede ausgehende Anfrage ein, hast
du den Bug eine Ebene tiefer nachgebaut. Der Proxy verdient sich seinen
Platz, indem er das Secret für eine Adresse freigibt und jede andere als
nicht vertrauenswürdig behandelt.
Was der Broker ändert
Der echte Modell-Key betritt die VM, in der der Agent läuft, nie. Der Host hält ihn und gibt ihn nur auf der Leitung frei, für einen Aufruf an den echten Endpunkt. Ein Repository kann die Base-URL umleiten, so viel es will; die Anfrage, die hinausgeht, trägt einen Stub, und ein Stub ist abseits deiner Maschine nichts wert.
Was er nicht ändert
Vertrauen zu vergeben bleibt deine Sache. Konfiguriere den Agent so, dass er mit einem vom Angreifer betriebenen Gateway spricht, und der Broker kann nicht wissen, dass du das Falsche meintest; er vermittelt dorthin, wohin du es ihm gesagt hast. Und die Garantie läuft Bindung für Bindung: der Modell-Key hier, deine anderen Secrets über dieselbe Stub-und-Tausch-Anordnung, jede so stark wie die Endpunkt-Bindung dahinter.
Der Begleit-Bug, und dieselbe Antwort.
CVE-2026-21852 kam mit einem lauteren Geschwister,
CVE-2025-59536,
bei dem die .claude/settings.json eines Repos Hooks definieren konnte,
Shell-Kommandos, die Claude Code beim Start ausführt, oder
Projekt-MCP-Server zwangsweise aktivieren, und diese Kommandos „werden
sofort beim Ausführen von claude ausgeführt, bevor der Nutzer den
Trust-Dialog überhaupt lesen konnte“. Das ist Code-Ausführung beim
Öffnen, die vertraute Form, und ihre Antwort ist die vertraute: Innerhalb
einer wegwerfbaren VM findet die Shell, die er spawnt, Stub-Credentials,
wo die echten Tokens sein sollten, und eine zustandsverändernde Aktion
pausiert an der Hypervisor-Grenze für eine Abfrage auf dem Host. Wir
haben dieses Argument ausführlich
gemacht.
Die beiden Bugs sehen verschieden aus, einer führt ein Programm aus und einer ändert eine Adresse, und sie landen am selben Ort: Ein Coding-Agent liest Dateien, die mit dem Code ankommen, den du ihm gibst, und handelt danach, und manche dieser Dateien entscheiden, was läuft und wohin Secrets gehen. Anthropic hat beide gepatcht. Die dauerhafte Antwort legt die Secrets dorthin, wohin diese Dateien zeigen können und nicht hinreichen.
Ein schmaler Sieg.
Den Modell-Key aus der Umgebung des Agents herauszuhalten besiegt diese Umleitung und die Familie von Angriffen, die den Agent dazu bringen, sein eigenes Credential irgendwo Neues hinzuschicken, denn der Key, den der Agent senden kann, ist wertlos. Der Hypervisor und der Proxy setzen das unterhalb des Agents durch, ohne dass vom Agent selbst irgendetwas verlangt wird.
Vertrauen bleibt dein Job. Du entscheidest immer noch, welche Repositories du öffnest und welche Gateways du konfigurierst, und ein Broker, der deinen Key dorthin sendet, wohin du zeigst, sendet ihn an einen schlechten Ort, wenn du absichtlich dorthin zeigst. Einzugrenzen, was ein geleakter Key anrichten kann, bleibt ebenfalls beim Modell-Anbieter; Anthropics Patch und die Workspace-Kontrollen decken diese Seite ab.
Ein Coding-Agent muss einen Schlüssel tragen und ihn irgendwohin senden, und für ein Fenster Ende 2025 entschied eine einzeilige Einstellung in einem geklonten Repo, wohin. Der Patch hat dieses Fenster geschlossen. Bromure Agentic Coding entfernt stattdessen den Schlüssel: Der Agent arbeitet in einer wegwerfbaren Maschine, die den echten nie gehalten hat, und der Proxy legt den echten Key für eine einzige Adresse auf die Leitung. Installiere es, richte deinen Agent auf welches Repository auch immer, und lass die nächste umgeleitete Base-URL einen String davontragen, der nirgendwo etwas wert ist.