LiteLLM 1.107.0 vergiftet: Malware stiehlt KI-Schlüssel

Das Gateway-Tool LiteLLM für große Sprachmodelle ist am 21. Oktober Opfer eines Supply-Chain-Angriffs geworden. Wie das Cloud-Sicherheitsunternehmen Wiz offenlegte, wurde die manipulierte Version LiteLLM 1.107.0 am selben Tag auf PyPI veröffentlicht; auch die Images auf GHCR und Docker Hub mit den Tags v1.107.0, latest, main-latest und main-stable enthielten dieselbe Stealer-Software. Als jüngste sichere Version nennt der Anbieter v1.106.2.

LiteLLM wird von BerriAI entwickelt und typischerweise als Proxy-Schicht im Unternehmen betrieben, die über eine einheitliche Schnittstelle Anfragen an Hunderte Modelldienste wie OpenAI, Anthropic oder Bedrock weiterleitet. Hinter dem Proxy liegen die API-Schlüssel der einzelnen Anbieter – genau darauf zielte der Angriff.

Schon die Installation startet den Diebstahl

Das bösartige Paket legt drei Dateien im Stammverzeichnis von site-packages ab: cook.pth, cook.py und sitecustomize.py. Die ersten beiden nutzen den .pth-Mechanismus von Python und werden bei jedem Start des Interpreters ausgeführt; dafür muss kein Anwendungscode LiteLLM importieren.

Der Stealer heißt intern privcollect, besteht aus 16 Modulen und hat es auf Folgendes abgesehen:

  • Browser-Zugangsdaten und Cookies von Chrome, Firefox, Edge und Safari
  • Cloud-Zugangsdaten für AWS, GCP und Azure
  • API-Schlüssel von KI-Anbietern wie OpenAI, Anthropic und Cohere
  • SSH- und GPG-Privatschlüssel sowie die Shell-Historie
  • Zugangsdaten zu vorgelagerten Anbietern, die direkt aus der PostgreSQL-Datenbank des LiteLLM Proxy ausgelesen werden

Die Daten werden zunächst mit AES-256-CBC verschlüsselt, der Schlüssel wird zusätzlich mit RSA-4096 umhüllt und per HTTP-POST an die von den Angreifern registrierte Fake-Domain www.litellm[.]dev gesendet. Die Datei sitecustomize.py läuft nur unter Linux und macOS und holt die Adresse der zweiten Stufe aus einem „Dead-Drop“-Repository auf GitHub; laut Wiz blieb diese Datei abgesehen von Testwerten stets leer, und GitHub hat das Repository gelöscht.

Die Zeitleiste im Überblick

Anhand der von Wiz veröffentlichten UTC-Zeiten lassen sich die einzelnen Zeitfenster grob berechnen:

PhaseZeit (UTC)Dauer
Fake-Repository erhält 10 Commits08:56–10:46rund 1 Std. 50 Min.
Bösartige Version auf PyPI online11:39–13:20rund 1 Std. 41 Min.
Manipulierte Docker-Tags onlinegegen 13:53 entferntrund 2 Std. 14 Min., gerechnet ab der PyPI-Veröffentlichung
Angreifer prüfen AWS-Zugangsdaten16:20–17:01rund 4,5 Std. nach dem Abfluss

Die gut eine Stunde auf PyPI wirkt kurz, doch Tags wie latest werden von zahlreichen CI-Pipelines und Kubernetes-Deployments automatisch gezogen. Die Reichweite hängt daher vor allem davon ab, in wie vielen Umgebungen in dieser Zeit Images neu gebaut wurden. Wiz nennt keine Download-Zahlen, und auch wie viele Organisationen betroffen sind, lässt sich derzeit nicht überprüfen.

Mit den erbeuteten Zugangsdaten riefen die Angreifer über die AWS-Instanzrollen kompromittierter CI-Runner und Kubernetes-Knoten Schnittstellen wie sts:GetCallerIdentity und bedrock:ListFoundationModels auf. Wiz sieht darin das typische Vorgehen beim LLMjacking, also der Zweckentfremdung fremder Cloud-Konten, um kostenlos große Sprachmodelle zu nutzen; in einigen Umgebungen zählten die Angreifer zudem IAM-Objekte auf, um routinemäßig aufzuklären.

Einfallstor vermutlich ein GitHub-Token

Die 10 Commits der Angreifer landeten im gefälschten Repository Berri-AI/litellm; die ersten neun trugen eine GitHub-Signatur, der letzte war unsigniert und kam mit einer anderen E-Mail-Adresse. BerriAI erklärte:

„malicious actions were taken through three engineers' GitHub accounts“
(Die bösartigen Aktionen wurden über die GitHub-Konten dreier Ingenieure ausgeführt.)

LiteLLM vermutet, dass diese OAuth-Tokens der GitHub CLI aus einer öffentlich erreichbaren internen Installation abgeflossen sind, möglicherweise im Zusammenhang mit einer gerade erst geschlossenen Sicherheitslücke; Wiz betont ausdrücklich, dass dies nicht bestätigt ist. BerriAI zufolge wurden alle betroffenen Tokens widerrufen. Teams, die 1.107.0 genutzt oder in diesem Zeitraum die genannten Images gezogen haben, sollten sämtliche auf den Rechnern lesbaren Cloud-Zugangsdaten, Modellschlüssel und SSH-Privatschlüssel rotieren.

Quellen: CocoLoop, Wiz-Forschungsblog, Mitteilung des Wiz Threat Intelligence Center, öffentliche Erklärung von BerriAI; geprüft wurden die betroffenen Versionen und Image-Tags, die bösartigen Dateinamen sowie die UTC-Zeiten der einzelnen Phasen.