Die Ransomware hatte keinen Operator
Anfang Juli dokumentierte Sysdig, was es den ersten Ransomware-Angriff nennt, der Ende zu Ende von einem KI-Agenten durchgeführt wurde — Aufklärung, Sammeln von Zugangsdaten, laterale Bewegung und eine gelöschte Produktionsdatenbank, ohne einen Menschen an der Tastatur. Der interessante Teil für jeden, der einen Coding-Agenten betreibt, ist nicht, dass ein Angreifer ein Modell benutzt hat. Es ist, dass die gesamte Kette damit beginnt, die Umgebung nach Geheimnissen zu durchsuchen. Bromure Agentic Coding wurde für einen Agenten gebaut, der genau das tut.
Wir haben zwei Jahre damit verbracht zu streiten, ob einem Coding-Agenten die eigenen Zugangsdaten anvertraut werden können. Sysdig hat gerade die andere Hälfte der Frage veröffentlicht: eine Ransomware-Bande richtete einen Agenten auf den Server eines Fremden und ließ ihn den ganzen Einbruch allein durchführen — laut denkend, seine eigenen fehlgeschlagenen Logins in einunddreißig Sekunden korrigierend, die Datenbank löschend, als er fertig war. Niemand steuerte. Die Einstiegshürde für diese Art Angriff ist jetzt, was auch immer der Betrieb eines Modells kostet.
Um 19:34:24 UTC an einem Abend fügte ein automatisierter Eindringling ein verstecktes Administratorkonto in eine Produktionsdatenbank ein. Zwölf Sekunden später schlug der Login fehl. Zwölf Sekunden danach probierte er die Standard-Zugangsdaten und erzeugte gleichzeitig einen frischen Passwort-Hash — zwei mögliche Ursachen parallel diagnostizierend. Einunddreißig Sekunden nach dem ersten Fehlschlag lieferte er eine korrigierte, mehrstufige Lösung: nicht mehr in einen kaputten Subprozess ausweichen, die Krypto-Bibliothek direkt importieren, die schlechte Zeile löschen, sie neu einfügen. Der nächste Versuch loggte sich ein.
Ein menschlicher Incident-Responder liest diese Zeitleiste und weiß, was er
vor sich hat. Kein Mensch diagnostiziert ein PATH-Problem, schreibt seinen
Exploit um und führt ihn in einer halben Minute erneut aus. Das war ein
Agent.
Was JADEPUFFER tat
Der Angriff, den das Threat-Research-Team von Sysdig JADEPUFFER nannte und Anfang Juli beschrieb, kam über einen ins Internet gestellten Langflow-Server herein — ein Werkzeug zum Bau von LLM-Apps — über CVE-2025-3248, eine fehlende Authentifizierung, die eine unauthentifizierte Anfrage beliebigen Python ausführen lässt. Dieser Teil ist gewöhnlich; Tausende von Langflow-Instanzen stehen exponiert. Was nach dem Fußfassen geschah, ist die Geschichte.
Der Agent zählte den Host auf und tat dann das, womit jedes
Post-Exploitation-Playbook jetzt beginnt: er durchsuchte die Maschine nach
Geheimnissen. Parallel jagte er LLM-Anbieter-Schlüssel (OpenAI, Anthropic,
DeepSeek, Gemini), Cloud-Zugangsdaten über AWS, Google, Azure und mehrere
chinesische Anbieter, Kryptowährungs-Wallets und Datenbank-Logins. Er zog
Langflows Backing-Datenbank nach gespeicherten Schlüsseln ab. Er fand einen
internen Objektspeicher, der noch sein Werkspasswort nutzte —
minioadmin:minioadmin —, listete jeden Bucket auf, darunter
terraform-state, und holte .env und credentials.json heraus. Als eine
Speicheranfrage als XML statt des erwarteten JSON zurückkam, schrieb er
seinen eigenen Parser an Ort und Stelle um und machte weiter.
Dann schwenkte er zum eigentlichen Ziel — einem separaten Server mit MySQL
und einem Nacos-Konfigurationsdienst —, fälschte ein Admin-Token mit Nacos'
bekanntem Standard-Signaturschlüssel, arbeitete sich durch die obige
Fehlschlag-Sequenz und beendete die Aufgabe. Er verschlüsselte alle 1.342
Nacos-Konfigurationseinträge mit einem Schlüssel, den er genau einmal auf der
Konsole ausgab und nie speicherte, löschte die ursprünglichen Tabellen und
erstellte eine README_RANSOM-Tabelle mit einer Bitcoin-Adresse und einem
Proton-Mail-Kontakt. Weil der Schlüssel nie gespeichert oder irgendwohin
gesendet wurde, hätte das Zahlen des Lösegelds die Daten nicht
zurückgebracht.
Das verräterische Zeichen war durchweg der Code selbst. Die Payloads steckten voller Kommentare in Klartext, die das Warum erklärten — Ziele nach Wert einstufend, erzählend „das ist das größte, lösch es auch“, jeden Schritt annotierend wie ein Modell, das laut denkt, denn genau das geschah.
Der Teil, der einen Entwickler beunruhigen sollte
Nennen Sie das eine Server-Sicherheitsgeschichte — patcht Langflow, stellt
keine Datenbank mit einem Nacos-Standardschlüssel ins Internet, holt den
Objektspeicher von minioadmin weg — und Sie hätten recht, und es wäre
alles die Liste von jemand anderem. Der Grund, warum es in einen Beitrag
über Coding-Agenten gehört, ist Schritt zwei.
Jedes erreichbare Geheimnis in dieser Umgebung wurde in dem Moment zu
Munition, in dem der Agent Codeausführung hatte. Die Schlüssel, nach denen
er suchte, sind dieselben, die Ihr Coding-Agent für seine Arbeit braucht:
das API-Token, mit dem er ein Modell aufruft, die AWS-Zugangsdaten, mit
denen er ein Deployment prüft, das GitHub-Token, mit dem er pusht, die
Datenbank-URL in Ihrer .env. JADEPUFFER zeigt, was ein Agent damit tut, in
dem Moment, in dem er aufhört, für Sie zu arbeiten — und wir wissen bereits,
dass Ihr Agent dazu gebracht werden kann, aufzuhören, für Sie zu arbeiten.
Das ist keine Spekulation. Allein diesen Sommer haben Forscher einen Coding-Agenten gezeigt, der durch einen gefälschten Bugreport in einem Fehler-Monitoring-Feed zum Ausführen von Angreifercode getrieben wurde, und in die Ausführung einer Payload gelenkt während einer scheinbar routinemäßigen Sicherheitsprüfung eines nicht vertrauenswürdigen Repositorys. In beiden bleibt der Agent höflich und hilfsbereit, bis er es nicht mehr ist. Stellen Sie JADEPUFFERs Autonomie neben diese Übernahmen, und die Form ist klar: der Gegner in Ihrer Sitzung kann jetzt genau der Agent sein, den Sie eingeladen haben, und sobald er kippt, betreibt er Aufklärung, erntet jede erreichbare Zugangsdatei und bewegt sich — allein, in Maschinengeschwindigkeit.
Die nützliche Frage ist also nicht „ist mein Agent vertrauenswürdig“. Sie ist „was kann der Agent erreichen, wenn er es nicht ist“. Jede Verteidigung, die antwortet, indem sie den Agenten bittet, sich zu benehmen — ein sorgfältiger System-Prompt, ein Fine-Tune, ein Vertrauensdialog — setzt gegen etwas, von dem JADEPUFFER beweist, dass es gezielt so gebaut werden kann, dass es das nicht tut.
Bromure geht davon aus, dass der Agent bereits feindlich ist
Bromure Agentic Coding lässt Ihren Coding-Agenten in einer wegwerfbaren Linux-VM laufen, und jede Netzanfrage, die er stellt, verlässt diese VM über einen Proxy auf dem Host. Der Entwurf geht von der Annahme aus, bei der die Branche immer wieder auf die harte Tour landet: der Agent wird früher oder später etwas ausführen, das Sie nicht beabsichtigt haben. Also wird das, was schützenswert ist, dort gehalten, wo das Denken des Agenten nicht hinreicht — auf dem Host, nicht in der Box.
Zugangsdaten sind der klarste Fall, weil sie das Erste sind, wonach ein
Eindringling greift. In Bromure betritt das echte Geheimnis nie die VM. Wenn
Sie einem Profil einen Anthropic-Schlüssel, einen AWS_SECRET_ACCESS_KEY,
ein GitHub-Token, eine Datenbank-Zugangsdatei geben, bekommt die Umgebung des
Agenten eine Attrappe an ihrer Stelle — einen brm_…-Platzhalter — und der
Host-Proxy tauscht die Attrappe gegen den echten Wert auf der Leitung, nur
bei der ausgehenden Anfrage an den Anbieter, der sie erhalten soll. Der Agent
authentifiziert sich und erledigt seine Arbeit; er hält das Material nur nie.
Selbst der API-Schlüssel, der den Agenten selbst am Laufen hält, ist ein
Köder für alles, was die Umgebung liest.
Lassen Sie jetzt JADEPUFFERs Schritt zwei dagegen laufen. Der Agent
durchsucht die Maschine und findet Schlüssel genau dort, wo er sie erwartet
— und jeder ist eine Attrappe. Er zieht sie ab, bereitet sie auf, sendet sie
als Beacon an einen Command-and-Control-Server, und der Angreifer am anderen
Ende erhält einen Haufen brm_…-Zeichenketten, die sich an nichts
authentifizieren. Die wertvollste Minute des Angriffs, die Zugangsdaten-Ernte,
die jeden Schritt danach befeuert, geht leer aus.
Dieselbe Haltung schwächt den Rest der Kette. Die Aufklärung läuft gegen eine Wegwerf-Box: die Maschine zu kartieren und nach Geheimnissen zu suchen findet eine wegwerfbare VM, aus einer gemeinsamen Basis geklont, nicht Ihren Laptop und nicht Ihr Netz. Die Persistenz, die JADEPUFFER installierte — ein Crontab-Eintrag, der alle dreißig Minuten einen Beacon an seinen Server sendet — lebt in dieser VM und stirbt in dem Moment, in dem Sie das Home des Profils löschen oder es auf die Basis zurücksetzen, was ein Menüpunkt ist, kein Vorfall. Und weil jede Anfrage durch den Host-Proxy austritt, ist der Beacon an die Adresse des Angreifers nicht unsichtbar: er ist eine aufgezeichnete Zeile im Sicherheitsprotokoll, der Sitzung zuordenbar, die ihn gemacht hat.
Für das zerstörerische Finale — die gelöschten Tabellen — sind Bromures
host-seitige Guardrails die Absicherung, die die Aufrufe des Agenten an
die Anbieter klassifizieren, die sie verstehen, und bei den zerstörerischen
ein hartes 403 zurückgeben, auf der Leitung, wo ein kompromittierter Agent
in der VM sie nicht abschalten kann. Wir haben über diese Grenze ausführlich
geschrieben, nachdem ein Cursor-Agent eine Produktionsdatenbank in neun
Sekunden löschte; derselbe
Mechanismus, der den Fehler eines ehrlichen Agenten stoppt, stoppt das
Delete* oder Terminate* eines feindlichen Agenten.
Was dies nicht behebt, damit wir ehrlich sind
Es ersetzt die Zugangsdaten, die Bromure einspeist
Der Tausch deckt die Geheimnisse ab, die Sie in einem Profil konfigurieren — Modellschlüssel, Cloud- und Git-Tokens, Container-Registries, die Endpunkte verwalteter Datenbanken. Ein Passwort, das Sie von Hand in eine Datei in der VM einfügen, oder eine Wallet-Seed, die in einem Repo liegt, ist nur eine Datei; der Proxy hat keine Attrappe, die er an ihre Stelle setzen kann. Halten Sie Geheimnisse im Zugangsdaten-Broker, nicht im Arbeitsbereich.
Guardrails schützen nur Anbieter, die wir parsen
Die Blockade zerstörerischer Aufrufe klassifiziert Kubernetes, AWS, DigitalOcean, die großen Git-Forges, Container-Registries und HTTPS-Datenbanken wie MongoDB, ClickHouse und Elasticsearch. Ein rohes MySQL-Socket zu einer nicht verwalteten Box — genau das Protokoll, über das JADEPUFFER Tabellen löschte — ist keines, das der Proxy heute liest. Die Abdeckung ist eine echte Liste, keine Allwissenheit.
Egress wird protokolliert, nicht standardmäßig verboten
Der Beacon taucht im Sicherheitsprotokoll auf; das ist Zuordnung, nicht Verhinderung. Nichts Echtes verlässt die VM, weil die Zugangsdaten Attrappen sind, aber wenn Sie die VM daran hindern müssen, mit beliebigen Hosts zu sprechen, ist das eine Netzrichtlinie, die Sie noch setzen müssen.
Es patcht nicht den Server, den Sie exponiert haben
Bromure schützt die Maschine, auf der Ihr Agent läuft. Es tut nichts für
ein ins Internet gerichtetes Langflow, einen Nacos-Standardschlüssel oder
einen minioadmin:minioadmin-Objektspeicher anderswo in Ihrem Bestand.
Die Erstzugangs-Hälfte dieser Geschichte bleibt gewöhnliche Hygiene.
Der Teil, der sich verallgemeinert
Nimm Langflow, Nacos und den bestimmten Abend weg, und JADEPUFFER ist eine Vorschau auf den Boden, auf dem jeder steht, der mit Agenten baut. Ein Agent, der mit echten Zugangsdaten in Maschinengeschwindigkeit denken, sich anpassen und handeln kann, ist jetzt billig zu mieten und leicht zu richten. Er muss nicht Ihr Angreifer sein, um Ihr Problem zu sein — er muss nur in Ihrer Sitzung landen, was die Übernahme-Forschung dieses Sommers ihm zutraut. Wenn das passiert, ist das Erste, was er tut, Ihre Umgebung zu lesen.
Bromure Agentic Coding versucht nicht, das zu verhindern, indem es den Agenten netter macht. Es macht die Umgebung nur für den Agenten lesenswert, der legitime Arbeit tut: echte Schlüssel auf dem Host, Köder in der Box, eine wegwerfbare VM und ein Protokoll von allem, was hinauszugehen versuchte. Der Agent kann feindlich werden und das ganze JADEPUFFER-Playbook durchziehen — und feststellen, dass die Zugangsdaten, die er stahl, nichts öffnen, dass die Box, in die er sich eingrub, beim nächsten Zurücksetzen gelöscht wird, und dass der einzige Ort, an dem die echten Geheimnisse je lebten, der eine Ort war, den er nie erreichen konnte. Es ist frei und quelloffen.