← Alle Beiträge

Kompromittierung von LiteLLM 1.107.0 verbreitete Malware zum Diebstahl von Zugangsdaten

Kompromittierung von LiteLLM 1.107.0 verbreitete Malware zum Diebstahl von Zugangsdaten

LiteLLM 1.107.0 wurde mit Malware zum Diebstahl von Zugangsdaten veröffentlicht, nachdem ein unbekannter Angreifer mithilfe eines zuvor offengelegten master key die Kontrolle über die GitHub-Repositories und den release-Prozess des Projekts erlangt hatte. Das kompromittierte Python-Paket gelangte am 21. Oktober 2026 sowohl zum Python Package Index (PyPI), einem Dienst zur Verteilung von Python-Software, als auch zu Docker Hub und zur GitHub Container Registry (GHCR).

Der Vorfall begann am 27. Mai 2026, als eine Konfigurationsdatei, die in das öffentliche Repository LiteLLM-Labs/lite-harness übertragen worden war, den master key für eine Bereitstellung der LiteLLM Agent Platform offenlegte. Die Agent Platform ist ein Open-Source-Werkzeug, das das Projekt zur Koordination von Software-Agenten verwendete. LiteLLM erklärte, der Fehler sei schnell bemerkt und der öffentliche commit durch einen force push überschrieben worden. Die offengelegten Zugangsdaten wurden für eine Sperrung vorgemerkt, der master key selbst wurde jedoch nicht gesperrt.

Am 10. Oktober nutzte ein unbekannter Angreifer mit einer Verbindung von 69.48.229[.]143 diesen Schlüssel, um in die Agent Platform einzudringen. Von dort erlangte der Angreifer ein OAuth token für die GitHub command-line interface, also einen digitalen Berechtigungsnachweis, mit dem eine Anwendung über ein GitHub-Konto handeln kann. Der Dienst verwendete dieses Token, damit selbst betriebene Cloud-Agenten pull requests einreichen konnten. LiteLLM erklärte, das Token sei nicht auf einen engen Berechtigungsumfang beschränkt gewesen und habe einem owner seiner GitHub-Organisation gehört. Dadurch habe der Angreifer owner-Zugriff auf sämtliche Repositories erhalten.

Zwischen 22:11 und 22:12 Uhr UTC an diesem Tag erstellte der Angreifer temporäre branches in BerriAI/litellm und BerriAI/litellm-auto. Bösartige automatisierte GitHub-Aufgaben vom Typ workflow wurden eingesetzt, um OAuth token von zwei Entwicklern mit maintainer-Zugriff zu erlangen. Die Zugangsdaten wurden an eine vom Angreifer kontrollierte Adresse bei webhook[.]site gesendet, und die Ausführungen der Automatisierungen wurden wenige Minuten später gelöscht.

Socket stellte später zwei bösartige commits wieder her, durch die eine Datei unter .github/workflows/cache.yml abgelegt worden war. Einer wurde am 10. Oktober um 22:11:45 Uhr UTC erstellt, ein weiterer folgte am 12. Oktober. Für jeden wurde ein kurzlebiger branch verwendet, der auf einem aktuellen legitimen commit basierte. Darin wurde eine Datei vom Typ workflow mit der unverfänglich wirkenden Betreffzeile „ci: bump cache config“ hinzugefügt. Sie wurde ausgeführt, sobald Code oder ein tag übertragen wurde; anschließend wurde der branch gelöscht. Die branch-Namen lauteten ci-tmp-a351cc und ci-tmp-4d8517, sodass in der gewöhnlichen Historie der Repositories nur wenig sichtbar blieb.

Diese Automatisierungen vom Typ workflow sammelten GitHub-Zugangsdaten, die Kennung und den signing key einer GitHub App sowie Zugriffsdaten für Linear, die LiteLLM-Bereitstellung und Together AI. Die Version vom 12. Oktober weitete die Sammlung auf Zugangsdaten für application programming interfaces (API) von Anthropic, OpenAI, AWS Bedrock, Tavily und GitGuardian aus. Sie zielte außerdem auf Sitzungsdaten des Playwright-Browsers, Verbindungsdetails für die Open-Source-Datenbank sowie Redis-Adressen, -Ports und -Passwörter. Socket wies darauf hin, dass eine gültige Playwright-Sitzung Zugriff auf das zugehörige Linear-Konto ermöglichen könnte, ohne ein Passwort einzugeben oder die multi-factor authentication abzuschließen. Zugangsdaten für GitGuardian könnten Warnmeldungen des Dienstes zur Erkennung von Geheimnissen offenlegen und möglicherweise die Kontrolle darüber ermöglichen. Die beiden Ziele waren webhook[.]site/65a42464-3cfa-4b02-a18c-17a6d7b86f37 und webhook[.]site/4da03473-a3e7-4dc2-a087-9c564b4208e1.

Am 21. Oktober umging der Angreifer zwischen 10:08 und 11:08 Uhr UTC die branch protection, also die GitHub-Kontrollen zur Einschränkung sensibler Codeänderungen, und änderte die release pipeline so, dass sie das ähnlich benannte Repository Berri-AI/litellm anstelle von BerriAI/litellm verwendete. LiteLLM erklärte, releases hätten normalerweise von einem autorisierten Entwickler eingeleitet und von einem besonderen Konto genehmigt werden müssen, das mit einem physischen Gerät im Büro des Unternehmens verbunden war. Zu Beginn derselben Woche sei die Regel vorübergehend gelockert worden, sodass zwei beliebige Entwickler releases auslösen und genehmigen konnten. Der Angreifer nutzte ein gestohlenes Token, um das release zu starten, und ein weiteres, um es zu genehmigen. Da das Token eines organization owner bereits kompromittiert war, hätte der Angreifer die Einschränkung laut LiteLLM wahrscheinlich vollständig entfernen können. Möglicherweise habe er darauf verzichtet, um das Entdeckungsrisiko zu verringern.

LiteLLM 1.107.0 wurde zwischen 11:39 und 11:40 Uhr UTC auf PyPI veröffentlicht. Images auf Docker Hub und GHCR folgten um 11:46 Uhr, und Ausführungsdatensätze für production und staging wurden zwischen 11:53 und 11:54 Uhr gelöscht. Upwind meldete die supply-chain attack um 12:06 Uhr, und PyPI stellte die betroffene Version um 13:23 Uhr unter Quarantäne. Laut der Zeitleiste von LiteLLM wurden die Docker-Hub-tags v1.107.0, latest, main-latest und main-stable um 14:20 Uhr UTC entfernt oder auf nachweislich saubere Images umgeleitet. In dieser Zeile wird allerdings der 21. Oktober 2025 genannt, anders als bei den umgebenden Ereignissen, die auf 2026 datiert sind.

Mehrere Untersuchungen ergaben, dass die bösartigen Dateien bei jedem Start von Python ausgeführt werden konnten, selbst wenn eine Anwendung LiteLLM nie importierte. Eine Komponente sammelte Zugangsdaten aus Entwicklerwerkzeugen, AI-Diensten, Cloud-Umgebungen und Webbrowsern. Sie erfasste außerdem Systemdetails, SSH-Dateien, Git- und GitLab-Zugangsdaten, Umgebungsvariablen sowie Tokens im Zusammenhang mit npm, PyPI, pip, Yarn, Maven, Gradle, Composer, RubyGems und Cargo. Die gestohlenen Daten wurden komprimiert und durch eine HTTP POST request an litellm[.]dev/healthcheck gesendet, eine am 13. Oktober 2026 registrierte Domain.

Eine zweite Komponente installierte eine auf Unix ausgerichtete backdoor, also eine verborgene Möglichkeit zur entfernten Ausführung von Befehlen, als background process. Sie kontaktierte die Infrastruktur des Angreifers stündlich, um beliebigen Code abzurufen und auszuführen. Microsoft Security Research warnte, dass bösartige Python startup files außerhalb des LiteLLM-Anwendungsverzeichnisses abgelegt wurden. Daher könnten diese Komponenten bestehen bleiben, wenn lediglich die Anwendung gelöscht wird.

LiteLLM erklärte, Tokens zu sperren, die mit seinen internen Systemen und den Plattformen von Anbietern verbunden waren. Die Untersuchung widerlegte außerdem eine frühere Theorie, wonach die GitHub OAuth token aus internen Bereitstellungsprotokollen entwendet worden seien. Für Websitebetreiber und IT-Teams zeigt der Fall, warum bei der Reaktion auf ein kompromittiertes Paket sowohl Softwareabhängigkeiten und build-Konten als auch gespeicherte Zugangsdaten für Dienste berücksichtigt werden müssen. Für Organisationen, die dieses umfassendere Risiko prüfen, bietet AEU-I sicherheitsorientierte IT, Infrastruktur und Beratung.

Auch verfügbar in: EnglishItalianoShqip