Oliver Jensen, Director of Security bei LiteLLM, erklärte, die Untersuchung des Vorfalls laufe noch; der ursprüngliche Angriffsweg, über den der Angreifer die schädliche Version veröffentlichen konnte, sei weiterhin Gegenstand der Nachforschungen. „Wir haben festgestellt, dass die schädlichen Aktionen über die GitHub-Konten von drei Entwicklern ausgeführt wurden, offenbar mithilfe gestohlener OAuth-Tokens der GitHub-CLI", sagte Jensen. „Der Angreifer nutzte das Konto eines Nutzers, um den Lauf des Project-Releasers auszulösen, und das Konto eines anderen Nutzers, um ihn freizugeben. Alle an diesem Angriff beteiligten Tokens wurden widerrufen."

Zugleich räumte Jensen ein: „Wir haben noch nicht ermittelt, auf welchem Weg der Angreifer an die betreffenden Tokens gelangt ist, und können daher noch nicht ausschließen, dass weiterer Zugriff auf diese GitHub-Konten besteht." Als vorläufige Gegenmaßnahme wurden bis auf einen nicht betroffenen Nutzer alle Konten aus der GitHub-Organisation entfernt. Außerdem habe LiteLLM in den öffentlichen Registries sämtliche Vertrauensverknüpfungen zur eigenen GitHub-Organisation gelöscht, um die Veröffentlichung weiterer schädlicher Pakete zu verhindern.

Die Analyse der manipulierten Version zeigt, dass der Code Cloud-Zugangsdaten, private Schlüssel, Browserdaten und Authentifizierungsdateien von KI-Entwicklungswerkzeugen einsammelt. Betroffen sind folgende Artefakte:

  • 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
  • litellm-1.107.0-cp310-abi3-win_amd64.whl
  • litellm-1.107.0.tar.gz (ohne Payload-Dateien, aber mit manipulierter pyproject.toml)

„Die erste Payload ist ein Credential-Stealer, der sich selbst privcollect nennt", so StepSecurity. „Die zweite Payload startet einen Hintergrund-Daemon, der stündlich einen Dead Drop auf GitHub abfragt und beliebigen Python-Code ausführt, den der Angreifer dort bereitstellt."

Gestartet wird die Schadsoftware bereits vor dem Import von LiteLLM: Eine Path-Datei namens „cook.pth" sorgt dafür, dass der Code automatisch beim Start des Interpreters läuft. Dieselbe Technik war bereits bei der Kompromittierung von LiteLLM im Rahmen der TeamPCP-Lieferkettenangriffe im März zu beobachten. Die Datei „cook.pth" enthält lediglich die Zeile „import cook", die den Sammler startet. Dieser greift Cloud-Tokens, Entwicklerkonten und private Schlüssel, JSON-Dateien mit Zugangsdaten für KI-Werkzeuge, Browserdaten von Chromium und Firefox sowie Umgebungsvariablen ab.

Darüber hinaus zielt die Schadsoftware gezielt auf LiteLLM-Installationen, um die im Proxy gespeicherten Zugangsdaten und die Modellkonfiguration auszulesen. Die gesammelten Daten werden in einem GZIP-komprimierten TAR-Archiv gebündelt und per HTTP-POST an „litellm[.]dev/healthcheck" geschickt.

Die Hintertür liest zudem den Inhalt einer Textdatei („domain.txt") in einem GitHub-Repository („github[.]com/letters9813"). Enthält sie eine Domain, wird derselbe Stealer ausgeführt sowie ein HTTP-GET-Request an „<domain>/codepy" gestellt und die Antwort ausgeführt. Das Repository liefert derzeit einen 404-Fehler.

Wer die schädliche Version heruntergeladen hat, sollte offengelegte Zugangsdaten aus einer sauberen Umgebung heraus widerrufen und ersetzen sowie die Version 1.106.2 per Digest festnageln.