Forschende von Aikido Security haben eine schädliche Kampagne entdeckt, die auf Entwickler abzielt, die OpenAI Codex verwenden. Das npm-Paket codexui-android, das als Remote-Weboberfläche für OpenAI Codex vermarktet wird und mehr als 29.000 wöchentliche Downloads erreichte, hat über ungefähr einen Monat hinweg versteckt Authentifizierungs-Tokens ausgelesen und an einen von Angreifern kontrollierten Server gesendet. Neben dem npm-Paket wurde dasselbe Exfiltrationsschema in Android-Apps auf Google Play mit insgesamt mehr als 60.000 Installationen festgestellt. Alle, die dieses Paket oder die zugehörigen Apps genutzt haben, sollten ihre OpenAI-Tokens umgehend widerrufen.
Mechanismus der Attacke: Vertrauen als Waffe
Das Besondere an dieser Kampagne ist, dass sie sich weder auf Typosquatting noch auf kurzlebige Köderpakete stützt. Nach Angaben der Forschenden handelte es sich bei codexui-android um ein funktionales Paket, das sich in aktiver Entwicklung befand und über ein sauberes Repository auf GitHub verfügte. Der schädliche Code wurde etwa einen Monat nach der ersten Veröffentlichung des Pakets im npm-Registry eingebracht – mutmaßlich, um zunächst das Vertrauen der Nutzer zu gewinnen und die Verbreitung zu erhöhen.
Ab der Version 0.1.82 enthielt das Paket Code, der den Inhalt der Datei ~/.codex/auth.json auslas und an den entfernten Server sentry.anyclaw[.]store/startlog schickte, der als legitime Monitoring-Plattform Sentry getarnt war. Unter den abgegriffenen Daten befanden sich unter anderem:
- access_token
- refresh_token
- id_token
- Kontenkennung (account ID)
Wie OpenAI in seiner Dokumentation warnt, enthält die Datei ~/.codex/auth.json bei Verwendung einer Dateispeicherung die Zugriffstokens im Klartext und muss daher wie ein Passwort behandelt werden. Jedes Mal, wenn sich ein Nutzer über ChatGPT oder einen API-Schlüssel in der Codex-App, dem CLI oder einer IDE-Erweiterung anmeldet, werden die Anmeldedaten lokal in dieser Datei zwischengespeichert.
Der Aikido-Forscher Charlie Eriksen hob hervor, dass das entwendete refresh_token seiner Einschätzung nach kein Ablaufdatum hat, was Angreifern potenziell unbegrenzten Zugriff auf alle Funktionen des kompromittierten Kontos verschaffen könnte. Es ist jedoch anzumerken, dass diese Aussage nicht durch die offizielle Dokumentation von OpenAI bestätigt wird.
Vektor über Android-Apps
Das npm-Paket war nicht der einzige Verteilungsweg. Nach Angaben von Aikido startete die Android-App OpenClaw Codex Claude AI Agent (Paketname: gptos.intelligence.assistant), veröffentlicht von einem Entwickler unter dem Namen BrutalStrike, das npm-Paket in einer PRoot-Sandbox und übermittelte die Codex-Zugangsdaten an denselben Endpunkt.
Technisch gesehen extrahierte die etwa 26 MB große App beim ersten Start eine Linux-Nutzerumgebung auf Basis von Termux in den privaten Speicher und startete Node.js über PRoot. Die Version des npm-Pakets war nicht festgelegt – die App lud jeweils die aktuell veröffentlichte Version, wodurch der schädliche Code automatisch eingebunden wurde, nachdem er in Version 0.1.82 eingeführt worden war.
Nach Angaben der Forschenden wurde diese App mehr als 50.000-mal installiert. Eine ähnliche Exfiltrationskette wurde in einer zweiten App desselben Entwicklers entdeckt – Codex (Paketname: codex.app) – mit mehr als 10.000 Downloads. Die übrigen drei Apps von BrutalStrike sollen den Berichten zufolge keine schädliche Funktionalität enthalten haben.
Reaktion des Autors und digitaler Fußabdruck
Als der Autor des Pakets über GitHub kontaktiert wurde, war sein Verhaltenf gab Anlass zu weiteren Fragen. Zunächst erklärte er, den Zugriff auf seinen npm-Account verloren zu haben, änderte seine Antwort dann jedoch und teilte mit, dass er „eine interne Untersuchung durchführt“ und „damit begonnen hat, die betroffene Funktionalität und die zugehörigen Daten zu entfernen“. Der Autor behauptete, die Zugangsdaten seien nicht an Dritte weitergegeben worden, erläuterte jedoch nicht, warum der Code zum Zugriff auf Codex-Tokens ausschließlich in das npm-Build des Pakets eingebunden worden war.
Bemerkenswert ist, dass das Profil des Autors im sozialen Netzwerk X die Domain anyclaw[.]store enthält – genau jene Domain, an die die abgegriffenen Daten gesendet wurden. Laut WHOIS-Einträgen wurde die Domain nur zwei Tage nach der Veröffentlichung der ersten Version des npm-Pakets (0.1.72) registriert, was auf eine frühzeitige Planung der Infrastruktur hindeutet.
Indikatoren einer Kompromittierung
- Exfiltrationsdomain:
sentry.anyclaw[.]store - Endpunkt:
sentry.anyclaw[.]store/startlog - Infrastrukturdomain:
anyclaw[.]store - Betroffenes npm-Paket: codexui-android (ab Version 0.1.82)
- Betroffene Android-Apps:
gptos.intelligence.assistant,codex.app
Empfehlungen
- Entfernen Sie umgehend das Paket codexui-android aus allen Projekten und prüfen Sie Ihre Abhängigkeiten auf dessen Verwendung.
- Widerrufen und erneuern Sie alle OpenAI-Tokens. Löschen Sie die Datei
~/.codex/auth.jsonund authentifizieren Sie sich nach der Bereinigung erneut. - Überprüfen Sie Netzwerklprotokolle auf Verbindungen zu den Domains
anyclaw.storeundsentry.anyclaw.store. - Deinstallieren Sie die Android-Apps OpenClaw Codex Claude AI Agent und Codex des Entwicklers BrutalStrike, falls sie installiert wurden.
- Führen Sie ein Audit der Aktivitäten Ihrer OpenAI-Konten auf unautorisierte Aktionen im letzten Monat durch.
- Erwägen Sie den Umstieg auf die Speicherung von Codex-Zugangsdaten im systemeigenen Schlüsselbund der Betriebssysteme anstelle einer unverschlüsselten Dateispeicherung.
Dieser Vorfall demonstriert eine ausgereifte Taktik für Angriffe auf die Software-Lieferkette: ein funktionales Paket, eine Phase zum Aufbau von Vertrauen, die schädliche Injektion nur im npm-Build bei einem sauberen GitHub-Repository sowie eine parallele Verbreitung über mobile Apps. Entwickler, die KI-basierte Werkzeuge nutzen, sollten darauf dieselben Prinzipien des Minimalvertrauens anwenden wie auf jeden fremden Code: Versionen von Abhängigkeiten festschreiben, Unterschiede zwischen dem Quellcode im Repository und dem veröffentlichten Paket überprüfen und Authentifizierungs-Tokens ausschließlich in geschützten Speichern des Betriebssystems ablegen.