Veröffentlicht wurden folgende kompromittierten Artefakte:
- LiteLLM v1.107.0 (PyPI)
- v1.107.0, latest, main-latest und main-stable (Docker)
- v1.107.0, latest, main-latest und main-stable (GHCR)
Die vergiftete Fassung enthielt Code, der Zugangsdaten und Schlüssel einsammelt und stündlich beliebigen Code von einem entfernten Server ausführt — damit wird das Paket faktisch zu einem Remote Access Trojan. Konkret verarbeitet der Python-Interpreter eine Pfaddatei namens „cook.pth", die den Import von „cook" anstößt. Das zugehörige Skript „cook.py" entschlüsselt sich selbst und startet eine Stealer-Routine namens „privcollect", die System-, Browser-, Entwickler-, Cloud- und KI-Werkzeug-Geheimnisse sammelt und die Daten per HTTP-POST an „litellm[.]dev/healthcheck" ausleitet.
Parallel versucht der Interpreter, eine „sitecustomize.py" auszuführen, die ausschließlich auf Linux- und macOS-Systemen läuft. Sie holt eine Datei „domain.txt" von einem inzwischen entfernten GitHub-Dead-Drop („github[.]com/letters9813"). Liefert diese eine gültige Antwort, lädt die Schadsoftware ein Python-Skript der zweiten Stufe von „<domain>/codepy" nach und führt es aus.
„Es forkt einen Hintergrund-Daemon, der eine Sperre unter ‘/tmp/remote_code_loader.lock’ belegt, um mehrere Instanzen zu verhindern, und geht dann in eine Endlosschleife", sagte Aikido-Forscher Ilyas Makari. „Jede Stunde holt der Daemon die aktuelle C2-Domain des Angreifers aus einem GitHub-Repository (raw[.]githubusercontent[.]com/letters9813/pythonclient-test/main/domain[.]txt), lädt dann von http://{domain}/codepy eine Python-Nutzlast und führt sie aus."
Nach Angaben der zu Google gehörenden Cloud-Sicherheitstochter Wiz war die Textdatei bis zu ihrer Entfernung durch GitHub gegen 13:30 Uhr UTC nur mit anfänglichen Testwerten gefüllt. „Der doppelte Ansatz, .pth-Dateien und sitecustomize.py gleichzeitig zu nutzen, scheint der erste dokumentierte Fall in freier Wildbahn zu sein", erklärten die Wiz-Forscher Benjamin Read und Rami McCarthy.
Wiz beobachtete zudem, dass gestohlene Zugangsdaten rund 4,5 Stunden nach der Exfiltration missbraucht wurden: Der Angreifer prüfte zwischen 16:20 und 17:01 Uhr UTC AWS-Instance-Role-Credentials, die von kompromittierten CI-Runnern und Kubernetes-Knoten stammten, von folgenden IP-Adressen aus:
- 168.100.8[.]57
- 165.227.201[.]8
„Jede Zugangsberechtigung wurde mit sts:GetCallerIdentity geprüft, gefolgt von bedrock:ListFoundationModels und einem ListModels-Aufruf — passend zu LLMjacking", so Wiz. „In einer kleinen Zahl von Umgebungen hat der Angreifer außerdem IAM aufgezählt (ListRoles, ListUsers, ListAccessKeys) und allgemeine Erkundung betrieben (ListAccounts, DescribeTrails und weitere)."
In einem am Mittwoch veröffentlichten Hinweis erklärte LiteLLM, man habe die Release-Pipeline nach einem ähnlichen Vorfall im März gehärtet: Releases wurden in ein privates Repository verlegt, Docker-Release-Tags unveränderlich gemacht und Docker-Images signiert. Nachdem die Maintainer die Release-Berechtigungen jedoch vorübergehend ausgeweitet hatten, damit zwei interne Entwickler tägliche Bugfix-Backports für Kunden veröffentlichen können, nutzte der Angreifer seinen Zugriff auf drei Sätze von GitHub-CLI-Zugangsdaten von Entwicklern aus, um schließlich die bösartige Version zu veröffentlichen.
Der Ablauf im Einzelnen:
- Am 19. Oktober 2026 weitete LiteLLM die Release-Berechtigungen für zwei interne Entwickler vorübergehend aus.
- Der Angreifer verfügte über drei Sätze von GitHub-CLI-Zugangsdaten von Entwicklern, darunter einen, mit dem sich GitHub-Workflows ausführen ließen.
- Mit dem Token eines Organisations-Owners deaktivierte der Angreifer Branch-Schutzmechanismen und erzwang das Pushen der bösartigen Änderungen.
- Er startete den kompromittierten Workflow und richtete ihn auf das nachgeahmte Repository „Berri-AI/litellm" statt „BerriAI/litellm", wodurch die vergifteten Artefakte signiert und veröffentlicht wurden.
Zur Herkunft der Tokens erklärte LiteLLM: „Nach einer gründlichen Untersuchung haben wir bestimmte Situationen beobachtet, in denen Claude Code das GitHub-CLI-OAuth-Token eines Nutzers in einen Antwortkörper einbettet; werden Antwortkörper protokolliert, können diese Tokens in LiteLLM-Logs auftauchen." Die Maintainer fanden außerdem ein „unerwartetes, unauffällig benanntes Benutzerkonto" in ihrer internen, zum öffentlichen Internet hin exponierten LiteLLM-Installation. Es wird vermutet, dass der Angreifer Zugriff auf diese Installation erlangte, dort die GitHub-CLI-OAuth-Tokens aus den Logs abgriff und damit den Release-Workflow kompromittierte. Wie die Installation öffentlich erreichbar wurde und wie der Angreifer Zugang erhielt, ist bislang unklar; LiteLLM hält eine kürzlich geschlossene Schwachstelle für die wahrscheinliche Ursache.
Der Einsatz einer „.pth"-Datei zum Start des Stealers ähnelt dem Vorgehen beim Angriff vom März 2026, der TeamPCP zugeschrieben wurde. Socket sieht derzeit jedoch keinen Beleg für eine Verbindung: „Die bisher gesichteten öffentlichen Belege stellen keine Verbindung zum März-Angriff her. Die eingebetteten öffentlichen RSA-Schlüssel unterscheiden sich, ebenso die Umsetzung der Exfiltration und das Verhalten der Backdoor. Das schließt nicht aus, dass derselbe Akteur anderes Werkzeug nutzt, aber wir haben keine Belege, die diese Zuschreibung stützen. Ob im März gestohlene Zugangsdaten eine Rolle gespielt haben, bleibt ebenfalls unbestätigt."
Entwicklern wird geraten, LiteLLM 1.107.0 zu entfernen, betroffene Hosts zu isolieren, nach den bösartigen Python-Artefakten zu suchen, den Zugriff auf die Exfiltrationsdomain zu blockieren, sämtliche Zugangsdaten zu rotieren und die Ausführung von „/codepy" zu untersuchen. „Eine einzige kompromittierte Installation kann einem Angreifer die Möglichkeit geben, bösartigen Code stromabwärts weiterzuschieben", sagte JFrog-Sicherheitsforscher Guy Korolevski. „Die Lehre für Sicherheitsteams lautet: Ein sauberes Quell-Repository sagt wenig über das Artefakt aus, das man tatsächlich installiert — prüft daher das konkrete Wheel und bewertet Versionen, bevor sie in einen Build gelangen. Wenn 1.107.0 irgendwo in eurer Umgebung lief, rotiert jede erreichbare Zugangsberechtigung und baut neu."
