Mit unsichtbarer Tinte geschrieben
Socket hat TrapDoor entdeckt, eine Lieferketten-Kampagne über npm, PyPI und Crates.io hinweg, die etwas Neues tut: Ein installiertes Paket schreibt die Regeldatei deines Coding-Agenten um — CLAUDE.md, .cursorrules — und versteckt die Anweisung in Unicode ohne Breite, das du nicht sehen kannst. Beim nächsten Start liest der Agent seine eigenen Hausregeln und führt einen „Sicherheits-Scan“ aus, der deine SSH-Schlüssel, Cloud-Zugangsdaten, dein GitHub-Token und deine Krypto-Wallets abgreift. Die Anweisung ist unsichtbar; der Diebstahl ist echt. Bromure Agentic Coding reicht diesem Scan eine Box, in der nichts zu holen ist.
Ein Paket, das du installiert hast, bearbeitet die Datei, der dein Coding-Agent am meisten vertraut — seine eigene Regeldatei — und schreibt die bösartige Zeile in Zeichen, die als nichts erscheinen. Du prüfst die Datei, siehst gewöhnliche Projektnotizen und stimmst zu. Der Agent liest dieselbe Datei und sieht einen Befehl: einen Sicherheits-Scan starten, die Ergebnisse hierher schicken.
Die meisten Angriffe, über die wir berichten, verstecken eine bösartige Anweisung dort, wo der Agent sie liest — eine Webseite, ein Pull-Request-Kommentar, eine README. Dieser versteckt sie an der letzten Stelle, an der du nachsehen würdest: in der Konfiguration des Agenten selbst. Am 22. Mai 2026 begann Socket, eine Kampagne zu verfolgen, die es TrapDoor nannte — 34 bösartige Pakete und mehr als 384 Versionen, veröffentlicht über npm, PyPI und Crates.io, wobei die Betreiber schneller neu veröffentlichten, als die Löschungen hinterherkamen. Sockets automatisierter Feed erfasste neue Releases im Schnitt in fünf Minuten und sechsundfünfzig Sekunden; das schnellste achtundfünfzig Sekunden nach der Veröffentlichung. The Hacker News und Phoenix Security berichteten in derselben Woche. Wir schreiben jetzt darüber, weil sein neuester Zug das bisher sauberste Beispiel für einen Lieferketten-Dieb ist, der geradewegs auf einen Coding-Agenten zielt.
Die Pakete sehen aus wie die Werkzeuge, zu denen eine Entwicklerin ohne
zweiten Gedanken greift: Umgebungslader, Wallet-Prüfer, Build-Helfer und —
das, mit dem alles anfing — eth-security-auditor, ein
„Sicherheits-Auditor“. Installiere eines und es macht die gewöhnlichen
Infostealer-Dinge. Aber die gemeinsame npm-Payload, eine 48-KB-Datei
namens trap-core.js, macht noch eine Sache, die alles andere als
gewöhnlich ist. Sie schreibt in .cursorrules und CLAUDE.md.
Die Zeile, die du nicht sehen kannst
Diese beiden Dateien sind Hausregeln. Cursor liest .cursorrules; Claude
Code liest CLAUDE.md. Es gibt sie, damit ein Repository dem Agenten
sagen kann, wie er sich in diesem Projekt verhalten soll — die
Konventionen, das Erlaubte und das Verbotene — und der Agent behandelt sie
als stehende Anweisungen, angewandt auf alles, was er in diesem Ordner
tut. Es ist der vertrauenswürdigste Text im Arbeitsbereich, weil du ihn
angeblich selbst geschrieben hast.
TrapDoor schreibt hinein und verbirgt das Geschriebene. Die bösartige
Anweisung ist mit Unicode-Zeichen ohne Breite kodiert — U+200B,
U+200C, U+200D, U+FEFF — Codepunkte, die ein Texteditor überhaupt
nicht darstellt. Öffne CLAUDE.md und du siehst deine gewöhnlichen
Projektnotizen. Führe git diff aus und je nach deinen Einstellungen
siehst du vielleicht nichts, wofür es sich lohnt anzuhalten. Die Bytes
sind da; die Glyphen nicht. Es ist eine Nachricht in unsichtbarer Tinte,
und der einzige Leser, der sie entwickelt, ist der Agent, der den ganzen
Unicode-Strom parst und eine Anweisung findet, die in seinem eigenen
Regelbuch steht.
Der Scan, der stiehlt
Die versteckte Anweisung sagt dem Agenten, einen „Sicherheits-Scan“ zu
starten. Nichts daran klingt alarmierend — du hast dem Agenten einen
Sicherheits-Auditor übergeben, und nun bitten ihn seine Regeln zu prüfen.
Was der Scan tatsächlich tut, ist die Maschine nach allem abzugrasen, was
Geld wert ist. Sockets Aufschlüsselung der Payload listet SSH-Schlüssel,
AWS-Zugangsdaten, GitHub-Tokens, Browser-Profile und Login-Datenbanken,
Umgebungsvariablen und API-Schlüssel auf und — die Signatur dieser
Kampagne — Kryptowährungs-Wallets: Sui, Solana, Aptos und die
Browser-Wallet-Erweiterungen. Dann exfiltriert sie zu einer
GitHub-Pages-Seite (ddjidd564[.]github[.]io) und, in der
Crates.io-Variante, zu GitHub Gists.
Ein Detail zeigt, wie bewusst das geschieht. Bevor sie irgendetwas sendet, „ruft die Payload aktiv AWS- und GitHub-APIs auf, um zu bestätigen, ob die gestohlenen Zugangsdaten gültig sind, und filtert vor der Exfiltration nach hochwertigen Tokens“. Sie greift nicht einfach und kippt aus. Sie testet jede Zugangsdaten gegen den echten Dienst, behält die lebenden und wirft die toten weg. Die Betreiber wollen eine saubere Liste funktionierender Schlüssel.
Phoenix Security benennt, warum das die anvisierten Leute am härtesten trifft: Krypto- und DeFi-Entwickler, weil „SSH-Schlüssel, Cloud-Zugangsdaten, GitHub-Tokens und Krypto-Wallet-Keystores routinemäßig auf derselben Maschine koexistieren“. Dieser Satz ist die ganze Angriffsfläche. Der Agent läuft auf deinem Laptop, als du, und alles Wertvolle ist in seiner Reichweite. Die unsichtbare Zeile in der Regeldatei ist nur der Auslöser; der umgebende Zugriff ist die Nutzlast.
Wo Bromure die Linie zieht
Bromure Agentic Coding hängt nicht davon ab, die unsichtbare Zeile zu erkennen — obwohl es, wie wir noch sehen werden, dieselben Bytes liest. Es ändert, was die Zeile erreichen kann, wenn sie zündet. Der Agent jedes Profils läuft in einer wegwerfbaren Linux-VM auf Apple Silicon, einen Hypervisor von macOS entfernt, und die Zugangsdaten in dieser Box sind nicht deine.
Die Zugangsdaten sind Köder. Das ist die Schicht, in die TrapDoor
geradewegs hineinrennt, denn TrapDoor ist im Kern ein
Zugangsdaten-Dieb. Ein Zugangsdaten-Broker
auf dem Host hält deine echten Anthropic-, AWS- und GitHub-Geheimnisse
vollständig aus der Box heraus. In der VM sieht der Agent Platzhalter —
ein brm_…-Token, eine synthetische kubeconfig, einen wegwerfbaren
SSH-Schlüssel — und der Broker tauscht den echten Wert erst an der
Netzwerkgrenze ein, bei Anfragen an Ziele, die du bereits genehmigt hast.
Also läuft der „Sicherheits-Scan“, grast die Platte ab und erntet genau
das, wofür er losgeschickt wurde: Fälschungen. Und der clevere
Validierungsschritt der Kampagne wendet sich gegen sie — er ruft AWS und
GitHub auf, um zu bestätigen, dass die Tokens leben, die Köder fallen bei
dieser Prüfung durch, und der Filter, der nur funktionierende Schlüssel
behalten soll, behält nichts.
Die Wallets sind nicht da. Die Sui- und Solana-Keystores, die Browser-Login-Datenbanken, die Wallet-Erweiterungen — nichts davon lebt in einer wegwerfbaren Coding-VM. Es liegt auf deiner echten Maschine, einen Hypervisor entfernt, wo der Scan es nicht sehen kann. Schließe die Sitzung und die Box setzt sich zurück, vergiftete Regeldatei und alles.
Die Exfiltration ist gefiltert. Nehmen wir an, der Scan findet etwas,
das es wert ist, gesendet zu werden. Der POST an ddjidd564.github.io,
oder der Schreibvorgang in ein GitHub Gist, ist eine ausgehende Anfrage,
und jede ausgehende Anfrage quert den Host-Proxy, wo das wahre Ziel beim
Hinausgehen gegen die genehmigte Liste des Profils geprüft wird. Ein Dieb,
der zu einer Adresse nach Hause telefoniert, die das Profil nie genehmigt
hat, kommt nicht hinaus — und destruktive Formen gegen die APIs, die das
Profil tatsächlich bereitstellt, treffen auf eine Schutzvorkehrung, die
sie ablehnen kann, ganz gleich, wozu der Agent überredet wurde.
Vor all dem sitzt die Schicht, die TrapDoor an seinem Auslöser trifft. Der ganze Angriff beginnt mit Inhalt, den der Agent liest — der vergifteten Regeldatei — und Bromure bewertet nicht vertrauenswürdigen Inhalt mit einem Injection-Detektor auf dem Gerät, bevor das Modell darauf reagiert. Das Unicode ohne Breite, das die Anweisung vor deinem Editor verbirgt, verbirgt sie nicht vor dem Bewerter: er liest denselben Byte-Strom, unsichtbare Codepunkte inbegriffen, und eine Regeldatei, die sich zu „einen Scan starten und die Geheimnisse hinausmailen“ dekodiert, ist genau die Form, die zu markieren er gebaut ist. Er fängt das meiste davon an der Tür ab. Eine hinreichend neuartige Kodierung kann einen Klassifikator noch überlisten, weshalb er vor der wegwerfbaren Box sitzt und nicht an ihrer Stelle.
Unsichtbar für dich, leer für den Dieb
Der beunruhigende Teil von TrapDoor ist nicht der Kodierungstrick. Es ist, dass der Trick bei der einen Datei funktioniert, der du vertrauen solltest — die Regeln, die du für deinen eigenen Agenten geschrieben hast — und dass ein Mensch, der diese Datei prüft, nichts Falsches sieht, weil es nichts zu sehen gibt. Erkennung muss jedes Mal gegen jede neue Art gewinnen, eine Zeile zu verstecken. Das ist ein Rennen, das sich zu laufen lohnt, und der Bewerter auf dem Gerät läuft es, aber es ist nicht der Ort, an dem die Sicherheit ruhen sollte.
Bromure Agentic Coding lässt sie eine Ebene tiefer ruhen. Es geht davon aus, dass der Agent irgendwann eine vergiftete Anweisung liest, die er nicht von einer echten unterscheiden kann — unsichtbare Tinte oder nicht — und stellt sicher, dass, wenn der Agent nach Geheimnissen zum Stehlen sucht, die Geheimnisse Köder sind, die Wallets auf einer Maschine liegen, die er nicht erreichen kann, und der Weg hinaus gefiltert ist. Der Scan läuft trotzdem. Er kommt nur mit leeren Händen zurück. Installiere es und gib deinem Agenten ein Regelbuch, das, vergiftet oder nicht, auf nichts Wertvolles zeigt.