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

Der Schlüssel hatte zu viele Zuhause

Wiz zählt mindestens neun KI-Entwicklerplattformen, die im Oktober Einbrüche gemeldet haben, die meisten auf Zugriff auf Zugangsdaten zurückzuführen, mit Angreifern, die es auf gespeicherte Umgebungsvariablen mit KI-Schlüsseln abgesehen hatten. Die jüngste, Northflank, forderte ihre Kunden am 30. Oktober auf, jede Umgebungsvariable als entschlüsselt zu betrachten, und Nutzer meldeten binnen Stunden Missbrauch ihrer KI-Schlüssel. In Bromure Agentic Coding liegt der Schlüssel, mit dem Ihr Agent programmiert, an einer einzigen Stelle auf Ihrem Mac, der Agent kann ihn nicht auf eine Plattform kopieren, und das Rotieren kostet ein Einfügen.

Jede Plattform, in die Sie einen KI-Schlüssel einfügen, behält eine Kopie davon. Im Oktober nahmen Angreifer diese Kopien bei neun Plattformen ins Visier, und Wiz sah gestohlene Schlüssel binnen 30 Minuten getestet.

Am 30. Oktober um 11:43 UTC meldete Wiz einen Einbruch an Northflank, eine Cloud-Plattform zum Bereitstellen von Apps, Datenbanken und KI-Workloads. Rund zwei Stunden später schrieb Northflanks Statusseite an alle Kunden: „Assume all environment variables have been decrypted. Disable/rotate all keys.“ (Gehen Sie davon aus, dass alle Umgebungsvariablen entschlüsselt wurden; deaktivieren oder rotieren Sie alle Schlüssel.) Um 15:12 ergänzte sie: „Multiple users are confirming that their AI keys have been used.“ (Mehrere Nutzer bestätigen, dass ihre KI-Schlüssel verwendet wurden.) Das letzte Update des Tages, um 23:38, lautete: „Users have reported unauthorised use of AI API keys supplied to the Northflank platform.“ (Nutzer haben die unbefugte Nutzung von KI-API-Schlüsseln gemeldet, die der Northflank-Plattform übergeben wurden.) BleepingComputer berichtet, Northflank habe weder gesagt, wie die Angreifer hineinkamen, noch wie viele Kunden betroffen sind.

Northflank war nicht die erste. Am selben Tag veröffentlichten die Wiz-Forscher Benjamin Read und Rami McCarthy Black October for AI Developer Platforms, das mindestens neun KI-Entwicklerplattformen zählt, die im Lauf des Monats Sicherheitsvorfälle gemeldet haben. „In jedem anderen Monat wäre das die Sicherheitsnachricht schlechthin“, schreiben sie.

Neun Plattformen in einem Monat

Die Liste von Wiz, in zeitlicher Reihenfolge:

DatumPlattformWas die Meldung sagt
6. Okt.Fireworks AIZugriff auf Zugangsdaten; Anzeichen eines „Agentenschwarm“-Angriffs
9. Okt.AndromedaTeil eines „branchenweiten Angriffs“
14. Okt.ZeaburZugriff auf Zugangsdaten; das Unternehmen stellt den Betrieb ein
15. Okt.Lightning AIZugriff auf Zugangsdaten
16.–17. Okt.OpenCodeEin „Altsystem“; gespeicherte Anbieterschlüssel offengelegt
20. Okt.Railway„Rechteausweitung in unserer Build-Infrastruktur“
23. Okt.WarpEin Drittanbieter; Agent-Traces abgeflossen
28. Okt.CommandCodeAuf Destillation zurückgeführt
30. Okt.NorthflankUmgebungsvariablen gelten als entschlüsselt

Wiz fand keine einzelne Schwachstelle und keine Abhängigkeit, die hinter allen neun steckt. Sie teilen ein Ziel. Die meisten Vorfälle gehen auf Zugriff auf Zugangsdaten zurück, und die Angreifer suchten gezielt nach gespeicherten Umgebungsvariablen, „vor allem solchen, die KI-Zugang gewähren“. OpenCode und CommandCode machten Destillation verantwortlich: Gestohlener Zugang zu Spitzenmodellen trainiert billigere Modelle. Den Rest der Nachfrage führt Wiz auf den Weiterverkaufsmarkt zurück, den es LLMJacking nennt: gestohlene Schlüssel, verkauft als vergünstigter Modellzugang.

In dreißig Minuten getestet, millionenfach weiterverkauft

Wiz verfolgte außerdem, was mit zwei Sätzen gestohlener Unternehmenszugangsdaten für Amazon Bedrock geschah. Keinen der beiden Fälle konnte Wiz einem bestimmten Plattformeinbruch zuordnen, aber das Muster erklärt, warum sich die Jagd auf KI-Schlüssel lohnt:

  • Binnen 30 Minuten nach dem gemeldeten Zugriff auf die Zugangsdaten testete ein einzelner InvokeModel-Aufruf von einer privaten IP-Adresse die Schlüssel. Er verlangte Claude Fable 5.1, scheiterte und wich auf Opus 5.5 aus, was funktionierte.
  • Ein kleiner Go-Client prüfte die Schlüssel danach 14- bis 120-mal am Tag, um sicherzugehen, dass sie noch funktionierten.
  • Ein boto3-Skript zählte die Bedrock- und EC2-Kontingente auf. Dasselbe Skript, bis hin zu seinem Versionsstring, tauchte in beiden Fällen auf.
  • Danach kam der Massenverkehr. Fall A machte rund 800.000 Bedrock-Aufrufe in etwa 30 Stunden, rund 90 % davon erfolgreich. Fall B machte rund 1,7 Millionen Aufrufe in etwa 13 Stunden, über eine Million davon erfolgreich.

Wiz schätzt, dass die beiden Fälle zum Listenpreis „wahrscheinlich über 100.000 $ an Nutzung“ verursachten. Die Token-Muster sahen aus wie weiterverkaufter Coding-Agent-Verkehr: Prompt-Caching und viele Endnutzer hinter einem einzigen Wiederverkäufer. Wiz verknüpft Infrastruktur, die die Schlüssel berührte, mit LLM-Weiterverkaufsseiten, darunter eine, die Zahlungen in USDT annimmt.

Das ist der Markt, den gestohlene KI-Schlüssel speisen: Leute, die Coding-Agenten auf fremde Rechnung laufen lassen.

Ein Schlüssel, eingefügt in jede Plattform, die ihn brauchteIhr KI-Schlüsselsk-ant-…, OpenAI,Bedrock-ZugangDeployment-PlattformVariable am DienstBuild-DienstVariable in PipelineCoding-Agent-Konsolegespeicherter SchlüsselGPU-Notebook-DienstVariable im StudioAngreiferVariablen entschlüsselt,Schlüssel getestetbinnen 30 MinutenWeiterverkauf~800k und ~1,7 Mio.Aufrufe, zwei Fälle,über 100k $ Listenpreis
Black October nach Wiz und Northflank. Entwickler fügen KI-Schlüssel in die Plattformen ein, die sie nutzen, wo die Schlüssel als Umgebungsvariablen liegen. Angreifer, die an diesen Speicher gelangen, nehmen die Schlüssel, testen sie binnen 30 Minuten und verkaufen Zugang an Weiterverkaufspools, deren Verkehr nach Coding-Agenten aussieht. In den beiden Bedrock-Fällen, die Wiz verfolgte, kamen so rund 2,5 Millionen Aufrufe zusammen.

Wie ein Schlüssel an neun Orten landet

Eine Entwicklerin bekommt einen Anthropic-Schlüssel und fängt an, ihn zu nutzen. Er wandert in den Coding-Agenten, dann in das Preview-Deployment, damit die KI-Funktion der App läuft, dann in den CI-Job, der die Evals ausführt, dann in einen Notebook-Dienst, um ein Fine-Tuning auszuprobieren. Jedes Einfügen dauert dreißig Sekunden und bringt etwas zum Laufen. Zu keinem davon kehrt man je zurück.

Coding-Agenten beschleunigen das. Bitten Sie einen, „das auf Northflank zu deployen“ oder „den Railway-Dienst einzurichten“, und er tut, was ein Entwickler tun würde: Er liest ANTHROPIC_API_KEY aus seiner Umgebung und übergibt ihn der CLI der Plattform als Dienstvariable. Das Deployment funktioniert. Der Schlüssel lebt nun auf einer Plattform mehr, neben dem Datenbankpasswort, und kein Mensch hat ihn dort eingetippt.

Dann wird eine Plattform kompromittiert, und der Rat ist jedes Mal derselbe. Bei Northflank lautete er „Revoke existing credentials with their issuing providers, generate replacements“ (widerrufen Sie bestehende Zugangsdaten beim jeweiligen Aussteller, erzeugen Sie neue). Dafür müssen Sie sich zuerst an jede Stelle erinnern, an die dieser Schlüssel gewandert ist.

Derselbe Monat in Bromure Agentic Coding

Bromure Agentic Coding betreibt Claude Code, Codex, Grok, Kimi und omp in Ubuntu-VMs auf Ihrem Mac, eine VM pro Maschine. Der Agent, seine Repositorys und jeder Befehl, den er ausführt, leben in der VM. Die echten Zugangsdaten und der Proxy, durch den der gesamte Verkehr der VM läuft, bleiben auf dem Mac.

Der Schlüssel liegt an einer Stelle

Modellschlüssel kommen einmal in Preferences › Models. Bromure speichert sie in models.enc, verschlüsselt mit AES-GCM unter einem Hauptschlüssel im Data Protection Keychain des Macs, mit abgeschalteter iCloud-Synchronisierung. Die App lädt keine Zugangsdaten, keinen Token-Speicher und kein Schlüsselmaterial irgendwohin hoch, synchronisiert oder sichert sie nirgends. Bromure betreibt keine Konsole, die Anbieterschlüssel speichert, also findet ein Angreifer auf unserer Seite nichts, wo er einbrechen könnte.

In jeder VM enthält ANTHROPIC_API_KEY einen Platzhalter, der mit sk-ant-api03-brm- beginnt. Claude Code akzeptiert ihn, weil er die richtige Form hat. Ruft der Agent api.anthropic.com auf, verlässt die Anfrage die VM über den Proxy auf Ihrem Mac, der den echten Schlüssel einsetzt und die Anfrage weiterschickt. Der Proxy fügt den Schlüssel nur für die Hosts des jeweiligen Anbieters ein und für keine anderen: anthropic.com für einen Anthropic-Schlüssel, openai.com für einen OpenAI-Schlüssel und so weiter.

Melden Sie sich stattdessen mit einem Claude-, ChatGPT-, Grok- oder Kimi-Abo an, bleiben die OAuth-Tokens auf dem Mac, und der Mac erneuert sie. Die VM hält nie ein Refresh-Token.

Der Agent kann ihn nicht verteilen

Spielen Sie das Deployment jetzt noch einmal durch. Der Agent ruft die CLI der Plattform auf und setzt ANTHROPIC_API_KEY auf dem Dienst, mit dem Wert aus seiner Umgebung. Dieser Wert ist der Platzhalter, und die Anfrage, die ihn trägt, geht an die API der Plattform.

Bromures Proxy durchsucht jede ausgehende Anfrage, Header und Body, nach Platzhaltern, die an einen Host gehen, für den sie nicht ausgestellt wurden. Ein Anthropic-Platzhalter in einer Anfrage an die API einer Deployment-Plattform ist so einer. Der Proxy blockiert die Anfrage mit HTTP 451, bevor ein einziges Byte die Plattform erreicht, pausiert die VM und zeigt This environment may have been compromised an, mit dem Namen der Zugangsdaten, dem Host, zu dem sie gehören, und dem Host, an den sie gesendet wurden.

Wir haben diesen Alarm für Malware gebaut, die Schlüssel stiehlt, und er schlägt genauso an, wenn ein Agent helfen will. Ihr Coding-Schlüssel landet nicht auf einer Deployment-Plattform, ohne dass Sie es sehen. Ist die Kopie genau das, was Sie wollen, schickt Allow sie für den Rest der Sitzung an diesen Host. Besser ist es, dem Produktionsdienst einen eigenen, auf die Produktion beschränkten Schlüssel auszustellen und den Schlüssel, mit dem Ihr Agent programmiert, auf Ihrem Mac zu lassen.

Agenten ziehen Geheimnisse auch in die andere Richtung. railway variables oder das env pull einer Plattform können eine Produktions-.env ins Repository legen, samt echten Werten. Schalten Sie in den Guardrails der Maschine Only allow credentials Bromure injects ein, und jede Anfrage mit Zugangsdaten, die Bromure nicht dort eingesetzt hat, wird blockiert und löst denselben Alarm aus. Ein echter Schlüssel, den der Agent von einer Plattform heruntergeladen hat, bleibt in der VM unbenutzt.

Bromure: eine echte Kopie und Platzhalter, die nicht reisenMaschinen-VM (Ubuntu)ANTHROPIC_API_KEY=sk-ant-api03-brm-…Agent ruft Modell aufan api.anthropic.comAgent deployt die Appsetzt Schlüssel auf PlattformProxy auf Ihrem MacHost passt zum Schlüsselechten Schlüssel einsetzen, sendenPlatzhalter an falschen Host451, VM pausiert, Alarm nennt das Leckapi.anthropic.comerhält echten SchlüsselDeployment-Plattformerhält nichtsmodels.enc auf dem Maceinzige echte Kopie, Keychain, nie synchronisiert
Dasselbe Deployment in einer Bromure-Maschine. Die Umgebung des Agenten enthält einen Platzhalter. Aufrufe an Anthropic bekommen den echten Schlüssel, eingesetzt auf dem Mac. Will der Agent den Schlüssel auf einer Deployment-Plattform setzen, taucht der Platzhalter in einer Anfrage an den falschen Host auf: Der Proxy blockiert sie mit 451, pausiert die VM und benennt das Leck. Der echte Schlüssel liegt nur einmal, auf dem Mac.

Bedrock ohne stehlbaren Schlüssel

Beide Fälle, die Wiz weiterverfolgte, liefen auf Amazon Bedrock mit langlebigen Unternehmenszugangsdaten. In Bromure kann jeder Agent auf Bedrock laufen, Claude Code nativ und die anderen über Bedrocks OpenAI-kompatible API, und keiner braucht dafür überhaupt einen Bedrock-Schlüssel. Lassen Sie das Feld Bedrock API key leer, und der Mac signiert jede Anfrage mit den AWS-Zugangsdaten der Maschine.

Diese Zugangsdaten können temporär sein. Wählen Sie in den AWS-Zugangsdaten der Maschine SSO / Identity Center, und der Mac holt kurzlebige Rollen-Zugangsdaten aus Ihrem SSO-Cache und erneuert sie etwa fünf Minuten vor Ablauf. Die VM bekommt einen falschen geheimen Schlüssel, der Signaturen erzeugt, die AWS ablehnt; der Mac entfernt sie und signiert neu. Nirgends hält eine Umgebungsvariable langlebige Bedrock-Zugangsdaten, die jemand entschlüsseln könnte.

Rotieren kostet ein Einfügen

Wenn eine Plattform Sie zum Rotieren auffordert, ist der Schlüssel Ihrer Agenten ein einziges Feld. Fügen Sie den neuen Schlüssel in Preferences › Models ein, und Bromure übernimmt ihn etwa anderthalb Sekunden nachdem Sie aufgehört haben zu tippen, auf jeder laufenden Maschine, die ihn nutzt. Jeder Agent, dessen Zugangsdaten sich geändert haben, wird mit seinen Resume-Flags neu gestartet, die Unterhaltung geht also weiter. Die VMs starten nicht neu, und nichts darin muss bearbeitet werden, weil nichts darin den alten Schlüssel hielt.

Liegen Ihre Schlüssel in 1Password, können die übrigen API-Schlüssel einer Maschine op://-Verweise statt Werte sein. Bromure löst sie auf dem Mac auf und tut das alle zwei Minuten erneut, sodass ein in 1Password rotiertes Element laufende Maschinen binnen weniger Minuten erreicht, ohne Neustart.

Ihr eigenes Protokoll jeder Nutzung

Northflanks zweiter Rat war, die Nutzungs- und Abrechnungsprotokolle des Anbieters auf Aktivität zu prüfen, die nicht von Ihnen stammt. In Bromure ist jeder Austausch eine Zeile in der Security Timeline auf Ihrem Mac, unter Credential brokering, mit einer maskierten Schlüsselvorschau und dem Host, etwa sk-a…f9q3 → api.anthropic.com. AWS-Signaturen, Bedrock eingeschlossen, erscheinen als Zeilen Credential used mit einem maskierten Zugriffsschlüssel. Zeigt das Dashboard des Anbieters einen Ausschlag, sehen Sie, welche Aufrufe von Ihren eigenen Maschinen kamen.

Auf einem Mac, der in Bromure Enterprise Manager eingebunden ist, gehen dieselben Austausche als credential.token_swap-Ereignisse an Ihre Organisation, nur mit Vorschauen, nie mit dem Schlüssel selbst. Eine Administratorin, die die Frage „Wurde einer unserer Schlüssel von anderswo benutzt?“ beantworten muss, hat die legitime Seite der Bilanz für die ganze Flotte.

Eine Kopie, auf dem Mac

Modellschlüssel liegen in models.enc, verschlüsselt unter einem Keychain-Schlüssel, nie synchronisiert oder hochgeladen. Keine Herstellerkonsole hält sie.

Platzhalter in der VM

Der ANTHROPIC_API_KEY des Agenten ist ein Platzhalter. Den echten Schlüssel fügt der Mac hinzu, nur für die Hosts des Anbieters.

Keine versehentlichen Kopien

Ein Platzhalter, der an eine Deployment-Plattform geht, wird mit 451 blockiert, die VM pausiert, und der Alarm nennt das Ziel.

Strikte Zugangsdaten

Im strikten Modus wird ein echter Schlüssel, den der Agent aus der env-Datei einer Plattform gezogen hat, beim ersten Einsatz blockiert.

Bedrock über SSO

Der Mac signiert Bedrock-Aufrufe mit kurzlebigen Identity-Center-Zugangsdaten. Kein langlebiger Schlüssel zum Speichern oder Stehlen.

Rotieren mit einem Einfügen

Ein neuer Schlüssel in Preferences › Models erreicht jeden laufenden Agenten in Sekunden. Die VMs starten nicht neu.

Zählen Sie die Kopien

Wiz weiß noch nicht, ob eine einzige Gruppe hinter allen neun Vorfällen steckt, und die meisten Plattformen haben keine Ursache veröffentlicht. Jede Plattform, die Ihren KI-Schlüssel speichert, kann ihn verlieren, und der Oktober hat gezeigt, dass auf die Diebe inzwischen Käufer warten.

Der Schlüssel, mit dem Ihr Agent programmiert, ist der, den Sie am wenigsten auf dieser Liste sehen wollen. Er funktioniert mit Ihren besten Modellen und Ihren höchsten Limits, und Ihr Agent nutzt ihn den ganzen Tag. In Bromure Agentic Coding bleibt er auf Ihrem Mac. Der Agent bekommt einen Platzhalter, mit dem keine andere Plattform etwas anfangen kann.

Zum Einbruch in die OpenCode-Konsole, einem der neun im Oktober, lesen Sie Die Schlüssel lagen in ihrer Konsole. Zu den gestohlenen Agent-Traces bei Warp lesen Sie Das Agent-Log lag in ihrer Cloud.