Die PyPI-Veröffentlichung von LiteLLM Version 1.107.0 wurde kompromittiert und installierte unbemerkt einen hochentwickelten Anmeldeinformationsdieb sowie eine Remote-Code-Execution-Backdoor. Der Angriff erfolgte über eine manipulierte pyproject.toml-Datei im Build-Prozess, wodurch die Quelltexte im offiziellen GitHub-Repository sauber blieben. Schadsoftware-Skripte wurden beim Start jedes Python-Prozesses ausgeführt, um sensible Tokens, SSH-Schlüssel und LLM-Proxy-Schlüssel an Angreifer zu exfiltrieren. Dies ist bereits der zweite gravierende Lieferkettensicherheitsvorfall bei diesem Projekt innerhalb kurzer Zeit, was intensive Diskussionen über die Zuverlässigkeit von Abhängigkeiten und Schutzmechanismen auslöste.
Wichtigste Punkte
Kompromittierte Version: Betroffen war ausschließlich das PyPI-Paket litellm in der Version 1.107.0 (Linux-, macOS- und Windows-Wheels); die Vorgängerversion 1.106.2 sowie die Release Candidates rc1 und rc2 blieben sauber.
Injektionsvektor: Der Angreifer fügte im Build-Schritt des Quellpakets via Maturin die Zeile data = "cook" in die pyproject.toml ein, wodurch ein versteckter Schadcode-Ordner in das site-packages-Verzeichnis kompiliert wurde, ohne im öffentlichen GitHub-Commit-Verlauf aufzutauchen.
Erste Nutzlast (Credential Stealer): Die skriptbasierten Dateien cook.pth und cook.py wurden bei jedem Start eines beliebigen Python-Prozesses auf dem Host ausgeführt und sammelten SSH-Schlüssel, Browser-Passwörter, Cloud-Zugangsdaten (AWS, Azure, GCP), Kubernetes-Token sowie API-Schlüssel aus der LiteLLM-Proxy-Datenbank.
Verschlüsselte Exfiltration: Die erfassten Daten wurden lokal mit einem zufälligen AES-256-CBC-Schlüssel verschlüsselt, dieser mit RSA-OAEP (über einen eingebetteten öffentlichen Schlüssel) gesichert und per HTTP-POST an www.litellm[.]dev/healthcheck gesendet.
Zweite Nutzlast (Backdoor):sitecustomize.py etablierte im Hintergrund einen stündlichen Daemon, der Steuerungsadressen von einem GitHub-Repository (letters9813/pythonclient-test) abrief, um potenziellen Zweitstufencode (codepy) herunterzuladen und auszuführen.
Schnelle Reaktion: PyPI entfernte das schädliche Paket rund zwei Stunden nach dem Upload; das zugehörige Angreiferkonto auf GitHub wurde kurz darauf gelöscht, wodurch die Backdoor funktionsunfähig wurde.
Diskussions-Highlights
Wiederholte Vorfälle & Reputationsverlust: Community-Mitglieder kritisierten scharf, dass dies bereits der zweite schwere Supply-Chain-Vorfall bei LiteLLM ist, was viele Entwickler zu dauerhafter Migration oder dem strikten Pinnen älterer Versionen (z. B. 1.106.2) bewegt.
Offizielle Stellungnahme: Der Maintainer Krrish bestätigte den Vorfall und verwies auf eine offizielle Incident-Dokumentation; er führte an, dass mutmaßlich exponierte GitHub-CLI-OAuth-Tokens, die von Coding-Assistenten wie Claude Code in Tool-Antworten eingebettet wurden, zum Kontenzugriff der Angreifer beitrugen.
Alternativen zur Software: Als Reaktion wurden diverse alternative, leichtere Tools genannt, darunter GoModel (ein in Go geschriebener Proxy) sowie nenya.
Präventive Abwehrmechanismen: Diskutiert wurden Abkühlungsphasen (Cooldowns) von 24 bis 48 Stunden (oder bis zu 8 Tagen) für Paketinstallationen, der Einsatz von Sandboxing-Tools wie Nono zur Durchsetzung strenger Berechtigungsrichtlinien und Credential-Injection sowie die Nutzung von Canary Tokens zur Erkennung von Datenabfluss.
Enterprise-Kritik: Unmut erregte die Ankündigung, dass Unternehmenskunden über ein privates Register vorab mit Patches versorgt wurden, während die Open-Source-Community ungeschützt blieb.
Glossar
PyPI (Python Package Index): Das offizielle öffentliche Software-Repository und Verzeichnis für Drittanbieter-Pakete in der Programmiersprache Python.
Maturin: Ein modernes Build- und Veröffentlichungswerkzeug für Python-Pakete, die in der Programmiersprache Rust geschrieben sind.
Wheel (.whl): Ein vorgefertigtes, binäres Installationsformat für Python-Pakete, das die Installation beschleunigt, da der Quellcode nicht lokal kompiliert werden muss.
Remote Code Execution (RCE): Eine kritische Sicherheitslücke, die es einem Angreifer erlaubt, beliebigen Programmcode auf einem fremden Computer auszuführen.
AES-256-CBC: Ein starker, symmetrischer Verschlüsselungsalgorithmus mit einer Schlüssellänge von 256 Bits im „Cipher Block Chaining“-Modus.
RSA-OAEP: Ein asymmetrischer Verschlüsselungsstandard, der auf mathematischen Problemen mit Primzahlen basiert und hier zur sicheren Übertragung des AES-Schlüssels diente.
Supply-Chain-Angriff (Lieferketten-Angriff): Eine Cyberattacke, bei der Schadcode in vertrauenswürdige Software-Abhängigkeiten oder Build-Pipelines eingeschleust wird, um nachgelagerte Anwender zu kompromittieren.
Canary Token: Ein digitaler Köder oder Überwachungsmechanismus (z. B. eine eindeutige Web-URL), der bei unautorisiertem Zugriff sofort Alarm schlägt.