Ein Lieferkettenangriff auf LiteLLM kompromittierte die Release-Pipeline des Projekts und verbreitete Malware zum Diebstahl von Zugangsdaten über PyPI und Container-Registries. Die schädliche Version 1.107.0 zielte auf Windows-, Linux- und macOS-Umgebungen ab.
Die Projektverantwortlichen erklärten, dass Angreifer am 21. Oktober in die Release-Pipeline eingedrungen seien und Pakete mit kompilierter Malware sowie Werkzeugen zur Remote-Codeausführung veröffentlicht hätten. Kunden, die das private Enterprise-Angebot nutzen, waren von dem Vorfall jedoch nicht betroffen.
LiteLLM bietet ein quelloffenes Python-SDK und ein KI-Gateway, das Anwendungen über eine gemeinsame API mit mehreren Modellanbietern verbindet.
Schädliche Version erreichte mehrere Vertriebskanäle
Die Kompromittierung betraf alle sieben PyPI-Wheel-Pakete für LiteLLM 1.107.0. Diese Installationspakete waren am 21. Oktober zwischen 11:39:51 und 13:23 Uhr UTC verfügbar.
Gleichzeitig verbreiteten die Angreifer kompromittierte Container-Images über Docker Hub und GitHub Container Registry.
Auf Docker Hub waren folgende Tags betroffen:
- v1.107.0
- latest
- main-latest
- main-stable
Diese Tags verwiesen zwischen 11:46:56 und 14:20 Uhr UTC auf ein schädliches Image.
Dieselben Tags betrafen auch die Images LiteLLM, LiteLLM Database und LiteLLM Non-Root auf GitHub Container Registry. Die Exposition begann um 11:46:56 Uhr UTC, und die kompromittierten Images waren spätestens um 13:51 Uhr UTC nicht mehr verfügbar.
Sicherheitsunternehmen entdeckten die schädliche Version innerhalb von sechs Minuten nach ihrer Veröffentlichung. Dennoch bot das Verteilungsfenster automatisierten Installationen und Bereitstellungen die Möglichkeit, die kompromittierten Artefakte herunterzuladen.
Malware wurde beim Start von Python ausgeführt
Forscher stellten fest, dass die Angreifer das Installationspaket und nicht den Anwendungscode von LiteLLM verändert hatten.
Konkret platzierten sie drei schädliche Dateien im Python-Bibliotheksverzeichnis der Umgebung: cook.pth, cook.py und sitecustomize.py.
Python verarbeitet beim normalen Start ausführbare Anweisungen in bestimmten .pth-Dateien. Außerdem versucht es, sitecustomize zu importieren, wodurch die Angreifer eine weitere Möglichkeit erhielten, ihre Schadsoftware zu starten.
Dadurch konnte die Malware bereits vor der Anwendung ausgeführt werden, sobald Python in der betroffenen Umgebung gestartet wurde.
Selbst das Starten von Python oder pip zur Untersuchung der Installation konnte den schädlichen Code aktivieren. Dieses Verhalten macht die gewöhnliche Fehlerbehebung auf kompromittierten Systemen potenziell gefährlich.
Gestohlene Daten umfassten mehr als KI-API-Schlüssel
Der Lieferkettenangriff auf LiteLLM zielte auf Zugangsdaten und sensible Informationen aus Entwicklungsumgebungen, Cloud-Diensten und Browsern ab.
Forscher identifizierten fünf Hauptkategorien:
- Cloud-Zugangsdaten: Zugangsdaten für AWS, Azure, Google Cloud, Kubernetes und Docker sowie Geheimnisse zur Infrastrukturverwaltung.
- KI-Konfiguration: Authentifizierungsdateien für KI-Entwicklungstools, gespeicherte Zugangsdaten für Modellanbieter und LiteLLM-Modelleinstellungen.
- Entwicklergeheimnisse: Zugangsdaten für Git, GitHub, npm, PyPI und CI/CD sowie .env-Dateien und private Schlüssel.
- Browserdatenbanken: Gespeicherte Anmeldedaten, Cookies, Autofill-Informationen, Zahlungsdaten und Browserverlauf.
- Systeminformationen: Umgebungsvariablen, Befehlsverläufe, Anwendungsverläufe und Netzwerkdetails.
Die Malware verschlüsselte die gesammelten Daten mit AES-256-CBC und schützte anschließend den Verschlüsselungsschlüssel mit RSA-4096. Danach lud sie das Material auf einen von Angreifern kontrollierten Endpunkt hoch, der sich als LiteLLM-Dienst zur Zustandsüberprüfung ausgab.
Hintergrund-Loader konnte zusätzlichen Code abrufen
Neben dem Diebstahl von Informationen startete sitecustomize.py einen entkoppelten Loader, der unabhängig von der Anwendung weiterlaufen konnte.
Der Loader überprüfte stündlich einen auf GitHub gehosteten Verweis. Anschließend rief er zusätzlichen Python-Code von einem externen Server ab, um ihn auf dem Hostsystem auszuführen.
Daher reicht das bloße Löschen des LiteLLM-Paketverzeichnisses möglicherweise nicht aus, um die gesamte Infektion zu entfernen. Schädliche Startdateien oder ein aktiver Loader könnten an anderen Stellen der Umgebung verbleiben.
Wiederherstellung erfordert mehr als den Austausch des Pakets
Die Projektverantwortlichen entfernten die schädlichen Pakete und bezeichneten LiteLLM 1.106.2 in ihren Empfehlungen zur Vorfallsbehandlung als saubere Version für die Wiederherstellung.
Potenziell betroffene Benutzer sollten kompromittierte Bereitstellungen stoppen und ihre Umgebungen untersuchen, ohne Python zu starten. Darüber hinaus sollten sie infizierte Systeme isolieren und aus sauberen Backups neu aufbauen.
Alle offengelegten Geheimnisse sollten umgehend ausgetauscht werden. Dazu gehören auch Zugangsdaten, auf die die Malware außerhalb der eigenen Konfiguration der betroffenen Anwendung zugreifen konnte.
Die bloße Installation einer sauberen LiteLLM-Version behebt weder das Problem gestohlener Zugangsdaten noch entfernt sie zurückgebliebene schädliche Dateien.
Frühere Kompromittierung zielte ebenfalls auf den Release-Prozess ab
Der Vorfall im Oktober folgt auf eine separate Kompromittierung von LiteLLM im März.
Bei diesem Angriff veröffentlichte die Gruppe TeamPCP schädliche PyPI-Versionen, nachdem sie den Schwachstellenscanner Trivy von Aqua Security kompromittiert hatte, den LiteLLM in seiner CI/CD-Pipeline verwendete.
Beide Vorfälle zeigen, wie ein kompromittierter Release-Prozess schädliche Software über ansonsten vertrauenswürdige Vertriebskanäle verbreiten kann.


0 Kommentare zu „Lieferkettenangriff auf LiteLLM verbreitet Schadsoftware über Python-Pakete und Docker-Images“