← Alle Beiträge

LiteLLM supply chain attack schleuste stealer und backdoor ein

LiteLLM supply chain attack schleuste stealer und backdoor ein

Die LiteLLM supply chain attack kompromittierte Version 1.107.0 des Python-Pakets. Das bedeutet, dass bösartiger Code in Software eingeschleust wurde, die über einen etablierten Entwicklungskanal verbreitet wurde. Berichte von SafeDep, Socket, StepSecurity und Upwind entdeckten einen credential stealer, der nach Authentifizierungsdaten sucht, sowie eine backdoor, die vom Angreifer bereitgestellten Python-Code ausführen konnte. Das betroffene Release wurde als wheels über den Python Package Index (PyPI) und als Docker images verbreitet. Ein wheel ist eine installierbare Python-Paketdatei, während ein Docker image eine paketierte Umgebung ist, mit der eine Anwendung in einem Container ausgeführt wird.

PyPI hat das kompromittierte Paket unter Quarantäne gestellt, und die bösartigen Docker images wurden entfernt. LiteLLM erklärte, die Untersuchung dauere noch an und es sei noch nicht geklärt, wie der Angreifer ursprünglich die Möglichkeit erlangte, das Release zu veröffentlichen. Die Organisation entfernte außerdem vertrauenswürdige Verknüpfungen zwischen ihrer GitHub-Organisation und öffentlichen Registries, um zu verhindern, dass diese Verbindungen zur Veröffentlichung weiterer Pakete genutzt werden.

Laut LiteLLM waren drei GitHub-Konten von Entwicklern an den bösartigen Aktionen beteiligt, wobei offenbar gestohlene OAuth tokens der GitHub-Kommandozeilenschnittstelle verwendet wurden. Ein OAuth token ist ein digitaler Berechtigungsnachweis, der es einer Anwendung oder einem Tool erlaubt, über ein Konto zu handeln, ohne wiederholt dessen Passwort anzufordern. Der Angreifer verwendete ein Konto, um den Release-Workflow des Projekts namens project-releaser zu starten, und ein weiteres Konto, um ihn zu genehmigen. LiteLLM widerrief jeden token, der bekanntermaßen daran beteiligt war. Allerdings konnte das Unternehmen noch nicht ermitteln, wie die tokens erlangt wurden, und erklärte, dass ein zusätzlicher Zugriff auf die betroffenen Konten noch nicht ausgeschlossen werden könne. Als vorübergehende Maßnahme entfernte es bis auf ein nicht betroffenes Konto alle Benutzer aus seiner GitHub-Organisation.

Die betroffenen Dateien sind litellm-1.107.0-cp310-abi3-macosx_10_12_x86_64.whl, litellm-1.107.0-cp310-abi3-macosx_11_0_arm64.whl, litellm-1.107.0-cp310-abi3-manylinux_2_28_aarch64.whl, litellm-1.107.0-cp310-abi3-manylinux_2_28_x86_64.whl, litellm-1.107.0-cp310-abi3-musllinux_1_2_aarch64.whl, litellm-1.107.0-cp310-abi3-musllinux_1_2_x86_64.whl und litellm-1.107.0-cp310-abi3-win_amd64.whl. Das Archiv litellm-1.107.0.tar.gz enthielt die payload-Dateien nicht, doch seine Konfigurationsdatei pyproject.toml war verändert worden.

StepSecurity identifizierte zwei bösartige Komponenten. Die erste, die sich selbst privcollect nennt, sammelt Zugangsdaten und andere vertrauliche Informationen. Die zweite erstellt einen daemon im Hintergrund, also ein Programm, das ohne geöffnetes Fenster weiterläuft, und überprüft jede Stunde einen Speicherort auf GitHub. Wenn dort vom Angreifer kontrollierter Python-Code verfügbar ist, führt der daemon ihn aus. Dadurch geht die Kompromittierung über einen einmaligen Datendiebstahl hinaus, da ein infiziertes System später zusätzliche Anweisungen empfangen und ausführen könnte.

Die Malware startet, bevor ein Benutzer LiteLLM in ein Programm importiert. Dies geschieht über cook.pth, eine Python path file, die der Interpreter beim Start automatisch verarbeitet. Diese Datei enthält eine Anweisung zum Importieren eines module namens cook, das den credential stealer startet. Ein ähnliches Startverhalten wurde bereits bei der früheren LiteLLM-Kompromittierung beobachtet, die mit den TeamPCP supply chain attacks im März in Verbindung stand.

Der credential stealer sucht nach cloud-Zugangsdaten, Zugangsdaten für Entwicklerkonten, private keys, Authentifizierungsdateien von Entwicklungstools für künstliche Intelligenz, Browserdaten von Chromium und Firefox sowie environment variables. Dabei handelt es sich um Systemeinstellungen, in denen Anwendungen häufig Konfigurationsdaten oder geheime Informationen speichern. Er kann außerdem LiteLLM-Deployments nach vom proxy gespeicherten Zugangsdaten und nach model configuration durchsuchen. Das gestohlene Material wird in einem mit GZIP komprimierten TAR archive abgelegt und über einen HTTP POST web request an litellm[.]dev/healthcheck gesendet.

Die backdoor liest außerdem domain.txt aus dem GitHub-Repository github[.]com/letters9813. Wenn die Datei eine domain enthält, führt die Malware den credential stealer erneut aus, ruft Inhalte vom Pfad /codepy dieser domain ab und führt die Antwort aus. Das Repository liefert derzeit einen 404-Fehler zurück, was darauf hinweist, dass der angeforderte Speicherort nicht verfügbar ist. Systeme, auf denen das kompromittierte Paket bereits ausgeführt wurde, müssen jedoch weiterhin bereinigt werden.

Benutzern, die LiteLLM 1.107.0 heruntergeladen haben, wird empfohlen, möglicherweise offengelegte Zugangsdaten aus einer sauberen Umgebung heraus zu widerrufen und zu ersetzen. Damit ist ein separates System gemeint, auf dem das bösartige Release nicht ausgeführt wurde. Empfohlen wird, Version 1.106.2 zu verwenden und sie anhand ihres digest festzulegen, eines unveränderlichen digitalen Fingerabdrucks, der sicherstellt, dass das erwartete Paket oder image installiert wird. Da der credential stealer cloud-Konten, Browser, private keys, Entwicklungstools und LiteLLM-proxy-Daten ins Visier nahm, sollte die Bereinigung alle auf dem betroffenen Gerät vorhandenen Zugangsdaten umfassen und nicht nur ein LiteLLM-Konto.

Für Unternehmen, die solche Entwicklungs- und Hosting-Risiken bewältigen müssen, bietet AEU-I IT, Infrastruktur und Beratung mit einem konsequenten Fokus auf Sicherheit. Das Entfernen des Pakets und der Docker images begrenzt neue Downloads, entfernt jedoch keine Malware von Systemen, auf denen Version 1.107.0 bereits installiert war, und ersetzt keine Informationen, die möglicherweise erfasst wurden.

Auch verfügbar in: EnglishItalianoShqip