Die Python-Bibliothek LiteLLM, die Anwendungen mit über 100 Sprachmodellen verbindet, lag am 21. Oktober knapp zwei Stunden lang als manipulierte Version 1.107.0 bei PyPI. Der eingeschleuste Code sammelt Zugangsdaten vom SSH-Schlüssel bis zum Cloud-Konto und lädt stündlich weiteren Code nach. Gebaut und signiert hat das Paket die offizielle Release-Pipeline des Projekts.
Ein Klick · kostenlosDr. Web bei Google bevorzugenMarkieren Sie drweb.de als bevorzugte Quelle. Dann sehen Sie unsere Artikel öfter unter den Top-Meldungen.Jetzt hinzufügenEine Datei mit zwölf Byte genügt: cook.pth enthält nur die Zeile „import cook“, und Python führt die Datei bei jedem Start aus, auch wenn ein Programm LiteLLM gar nicht nutzt.[1] Laut PyPI-Statistik wird LiteLLM rund 3,4 Millionen Mal am Tag heruntergeladen.[6]
Das Wichtigste in Kürze
- Betroffen sind litellm 1.107.0 bei PyPI von 13:39 bis 15:23 Uhr MESZ, vier Docker-Tags bis 16:20 Uhr.
- Version 1.106.2 und alle älteren Versionen gelten als sauber.
- Betreiber mit installierter Version 1.107.0 sollten alle vom Rechner erreichbaren Zugangsdaten wechseln.
- Die Angreifer nutzten gestohlene GitHub-Zugänge von drei Entwicklern.
Wie kam der Schadcode in das offizielle Paket?

Nach dem Vorfallbericht von LiteLLM besaßen die Angreifer GitHub-CLI-Zugangstoken von drei Entwicklern. Mit dem Token eines Administrators der GitHub-Organisation hoben sie den Branch-Schutz auf und änderten den Release-Workflow so, dass er aus dem Doppelgänger-Repository Berri-AI/litellm statt BerriAI/litellm baute. Ein zweites Token erteilte die Freigabe, ein drittes löschte danach die Protokolle der Läufe.[2] Die Token stammen nach jetzigem Stand aus den Logs einer internen, offen im Netz erreichbaren LiteLLM-Instanz. Dorthin gelangten die Token nach Darstellung des Unternehmens, weil Claude Code solche Token in bestimmten Fällen in Antworten einbette. LiteLLM prüft das noch.
Das Paket legt neben cook.pth die Dateien cook.py und sitecustomize.py ab. Der Datendieb greift auf 16 Datenquellen zu, darunter gespeicherte Browser-Passwörter, AWS-, Azure- und Google-Cloud-Zugänge, Kubernetes-Konfigurationen sowie Einstellungen von Claude Code, Cursor und Copilot. Die zweite Datei startet einen Hintergrundprozess, der stündlich eine Serveradresse aus einem GitHub-Konto holt und von dort Code ausführt. Das Konto war zwei Stunden nach dem Upload gelöscht, bis dahin konnte weiterer Code nachkommen.[1]
Warum half die Signatur nicht?
Nach dem ersten Angriff auf LiteLLM im März verlegte das Team die Releases in ein privates Repository, stellte auf Trusted Publishing um, bei dem PyPI nur Uploads aus einer festgelegten Build-Umgebung annimmt, und signierte fortan Docker-Images.[2] Eine solche Signatur belegt nach der PyPI-Dokumentation, woher ein Paket stammt, aber nicht, ob man ihm trauen kann. Schadcode, der vor oder während des Builds hineingerät, trägt dieselbe gültige Signatur.[3] Im Mai trugen auch die manipulierten Versionen von 42 TanStack-Paketen gültige Herkunftsnachweise.
Ein signiertes Paket aus der offiziellen Pipeline kann trotzdem fremden Code enthalten. Ein paar Tage Wartezeit hätten hier gereicht.
Markus Seyfferth, Chefredakteur Dr. Web
Ablauf am 21. Oktober (MESZ)
Was müssen Betreiber jetzt tun?
LiteLLM rät, eine betroffene Umgebung nicht mit pip zu reparieren, weil jeder Python-Start den Schadcode erneut auslöst.[2]
- Prüfen: Suchen Sie in site-packages nach cook.pth, cook.py und sitecustomize.py. Ein fehlender Fund beweist nichts, weil Container und Aufräumskripte Spuren löschen.
- Bereinigen: Löschen Sie die Dateien aus der Shell, beenden Sie den Hintergrundprozess und bauen Sie Umgebung oder Image mit litellm 1.106.2 neu.
- Zugangsdaten wechseln: Dazu zählen die Cloud-Berechtigungen, mit denen der Server arbeitet, alle in der LiteLLM-Datenbank gespeicherten Schlüssel für Sprachmodell-Dienste und das Datenbank-Passwort.
- Wartezeit einbauen: uv kennt die Option
exclude-newermit dem Wert7 days, pip die Option--uploaded-prior-to P3D.[4][5] GitHubs Dependabot wartet seit Juli drei Tage.
Weil der Datendieb auch Browser-Passwörter und Verlauf ausliest, kann ein Befall die Meldepflicht gegenüber der Datenschutzaufsicht binnen 72 Stunden nach Art. 33 DSGVO auslösen.[7] Für den 27. Oktober kündigt LiteLLM zudem die Offenlegung einer weiteren Sicherheitslücke an, deren Korrektur bisher nur Enterprise-Kunden erhalten.
Quellen
7 Quellen anzeigenQuellen ausblenden
- Kunal Singh (SafeDep)Compromised LiteLLM 1.107.0 on PyPI Installs a Credential Stealer and Backdoor
- LiteLLM„LiteLLM release v1.107.0 Compromised“, Vorfallbericht (21. Oktober 2026, Stand 22:30 Uhr) und GitHub-Issue 47826
- PyPI-DokumentationSecurity model and considerations (Attestations)
- Astraluv-Einstellungen, exclude-newer
- pip-Dokumentationpip install, Option –uploaded-prior-to
- PyPI StatsDownloads von litellm (Abruf 22. Oktober 2026)
- Art. 33 DSGVO: Meldung von Verletzungen des Schutzes personenbezogener Daten an die Aufsichtsbehörde
Mehr Newshunger?
- „Vollständig kompromittiert“: Wie der LiteLLM-Angriff Ihren KI-Stack trifft
- 42 TanStack-Pakete vergiftet: Wurm umgeht SLSA-Provenance erstmals
- PyPI blockiert neue Dateien in alten Releases nach 14 Tagen
- Dependabot wartet jetzt drei Tage: GitHubs neue Standard-Wartezeit gegen Lieferketten-Angriffe
- Miasma: npm-Wurm stiehlt Cloud-Zugänge
- Zod 4.6.6 ist sauber: Der Schadcode kam nur bis ins Repository
- Rank Math Pro: Update 3.0.123 brachte Schadcode auf WordPress-Websites
- Cybersecurity-Glossar 2026: 99 Begriffe von BSI bis Zero Trust für Entscheider
