Zum Inhalt springen
Guide

LiteLLM hat eine Hintertür: Überprüfen Sie diese Woche Ihre KI-Toolchain

| 8 min read

TeamPCP hat in einer LiteLLM-Version Malware zum Diebstahl von Anmeldeinformationen ausgeliefert und AWS-, GCP- und SSH-Schlüssel von Entwicklungsmaschinen entfernt. Fünf Prüfungen, die Sie vor Ihrer nächsten Pip-Installation durchführen müssen.

Server rack representing supply chain infrastructure and credential exposure
Photo by Taylor Vick on Unsplash

Im März 2026 veröffentlichte ein Bedrohungsakteur namens TeamPCP eine manipulierte Version von litellm, die Python-Bibliothek, die über 100 LLM-Anbieter hinter einem einzigen vereint OpenAI-kompatible Schnittstelle. Die Version enthielt einen Infostealer, der in den Post-Installationspfad integriert war. Jeder, der gelaufen ist pip install litellm während des Fensters wurden private SSH-Schlüssel übergeben, AWS-Anmeldeinformationen, Azure-Tokens, GCP-Dienstkonto-JSONs und Docker config.json Dateien an einen vom Angreifer kontrollierten Endpunkt. The Hacker News, Ardan Labs und Security Boulevard Jeder bestätigte die Zuschreibung und die exfiltrierte Artefaktliste.

LiteLLM ist nicht unbekannt. Es befindet sich in Agent-Frameworks, in CI-Pipelines, die die Auswertung weiterleiten Datenverkehr zwischen Anbietern, in Jupyter-Notebooks auf dem Laptop eines Datenwissenschaftlers, der ebenfalls Platz bietet langlebige Cloud-Anmeldeinformationen. Eine einzige kompromittierte Version verschaffte dem Angreifer eine Wallet des Anbieters Schlüssel, eine Reihe von Cloud-Rollen und das SSH-Material, um diese Schlüssel seitlich in jedes Repo zu verschieben erreichen könnte.

Sie können nicht verhindern, dass der PyPI-Token eines Betreuers gestohlen wird. Sie können Ihren Explosionsradius verkleinern damit, wenn die nächste KI-Bibliothek getroffen wird; und das wird es; Ein Laptop verwandelt sich nicht in einen cloudübergreifender Vorfall. Hier sind fünf Überprüfungen, die es wert sind, diese Woche in der gesamten KI durchgeführt zu werden Toolchain: LiteLLM, LangChain, LlamaIndex, Ollama-Wrapper, Claude SDKs, MCP-Clients und alle Agent-Framework, das Sie in der Produktion haben.

Was TeamPCP tatsächlich genommen hat

Die Nutzlast lief hinein setup.py und einen Post-Install-Hook. Beim Importieren oder Installieren Lesen Sie Folgendes aus dem Home-Verzeichnis des Entwicklers und dem CI-Runner-Dateisystem:

  • ~/.ssh/id_rsa, id_ed25519, Und known_hosts
  • ~/.aws/credentials Und ~/.aws/config Profile
  • ~/.azure/ Token und Anmeldeinformationen aktualisieren
  • GCP application_default_credentials.json und Dienstkonto-JSON-Dateien
  • ~/.docker/config.json einschließlich Registrierungsauthentifizierungstoken
  • Umgebungsvariablen beginnend mit AWS_, GCP_, OPENAI_, ANTHROPIC_, GITHUB_

Der Exfil-Kanal war ein einfacher HTTPS-POST an eine Angreiferdomäne, der wöchentlich wechselte. Takedown geschah innerhalb weniger Tage, aber dieses Zeitfenster reichte; Durchgesickerte Zugangsdaten können nicht wieder freigegeben werden. Weiter zu den Schecks.

Prüfung 1: Pin-genaue Versionen, keine Bereiche

Der ^1.14.0 Und ~=1.48 Muster in requirements.txt, pyproject.toml, Und package.json Lassen Sie jede neue Neben- oder Patch-Version über Nacht in eine saubere Umgebung rollen. So wird aus einem dreistündigen Schadfenster ein monatelange Exposition; Ihre Sperrdatei wurde nie neu generiert, aber Ihr CI-Cache hat den Fehler behoben Version auf dem nächsten Cold Build.

Genaue Versionen anheften. Pin per Hash, wenn das Ökosystem dies unterstützt.

Mit --require-hashes, pip weigert sich, alles zu installieren, dessen SHA-256 nicht übereinstimmt was Sie zum Sperrzeitpunkt generiert haben. Eine kompromittierte Version mit derselben Versionszeichenfolge, aber a Ein anderer Tarball-Hash schlägt bei der Installation fehl. Paar pip-compile --generate-hashes mit einem CI-Job, der die Hashdatei nur bei expliziten Abhängigkeitsaktualisierungen neu generiert, niemals bei einer einfachen installieren.

Poetry-Benutzer erhalten über die Sperrdatei das gleiche Sicherheitsnetz. Das Problem ist die Caret-Syntax in pyproject.toml; Ersetzen Sie es durch exakte Pins:

poetry install --sync Entfernt alle Pakete, die nicht in der Sperrdatei enthalten sind, wodurch der Vorgang gestoppt wird eine streunende Abhängigkeit vom Verstecken zwischen Bereitstellungen. Verwenden Sie für npm-seitige KI-Tools npm ci (nicht npm install) bei jedem CI-Lauf und Commit package-lock.json.

Prüfung 2: Anmeldeinformationen von Entwicklungs-Shells isolieren

Eine Entwickler-Shell, die hat ~/.aws/credentials Mit einem langlebigen Zugangsschlüssel ist ein geladener Die Waffe ist auf Ihre Cloud-Rechnung und Ihre Kundendaten gerichtet. LiteLLM benötigte diese Anmeldeinformationen nicht seinen Job machen; Sie lagen auf der Festplatte, weil der Entwickler einmal ausgeführt wurde aws configure und nie aufgeräumt.

Anmeldeinformationen von der Festplatte verschieben. Laden Sie sie bei Bedarf, fassen Sie sie kurz zusammen und widerrufen Sie die Dauerhaftigkeit Schicht:

  • AWS: aws sso login Die Sitzungsdauer ist auf 8 bis 12 begrenzt Stunden. Löschen ~/.aws/credentials. Alles sollte durchgehen ~/.aws/sso Cache, der von selbst abläuft.
  • GCP: gcloud auth application-default login mit --lifetime=43200. Widerrufen Sie langlebige JSONs für Dienstkonten, die sich auf Laptops befinden. Verwenden Sie die Workload Identity Federation von CI.
  • Azurblau: az login mit bedingtem Zugriff, der MFA erzwingt; töten Gespeicherte Aktualisierungstoken, die älter als 12 Stunden sind.
  • API-Schlüssel: Bewahren Sie sie in 1Password, Vault oder Doppler auf. Bei Prozessbeginn einspritzen über op run oder vault read. Exportieren Sie sie niemals nach ~/.zshrc.

Wenn TeamPCP nur abgelaufene STS-Sitzungstoken gefunden hätte, würde der Explosionsradius bei einigen Stunden enden des Zugriffs. Der Vorfall ereignete sich, weil langlebige Schlüssel betriebsbereit im Klartext auf der Festplatte lagen lesen.

Check 3: Scannen Sie jede Installation mit einer Sandbox

Bevor Sie einer neuen KI-Bibliothek oder einem Upgrade einer bestehenden vertrauen, installieren Sie sie irgendwo Ich kann Ihre Anmeldeinformationen nicht erreichen. Ein wegwerfbarer Docker-Container mit gelöschten Funktionen und Durch die Netzwerkisolation erfahren Sie, ob der Installationszeitcode etwas Verdächtiges bewirkt:

Das zweistufige Muster ist wichtig. Schritt eins benötigt Netzwerkzugriff, um PyPI zu erreichen, also eine Nachinstallation Das Skript könnte immer noch exfiltrieren. Führen Sie Schritt eins auf einer sauberen VM ohne Geheimnisse und einer DNS-Ausgangsregel aus das jeden ausgehenden Hostnamen protokolliert. Schritt zwei läuft mit --network=none; wenn Ihr Wenn die Bibliothek zum Zeitpunkt des Imports versucht, nach Hause zu telefonieren, schlägt der Import fehl und Sie wissen es.

Besser: Verwenden Sie eine Einweg-MicroVM wie Firecracker oder orb auf macOS für das gleiche Form ohne den gemeinsamen Kernel von Docker. Für JavaScript bietet Ihnen das Berechtigungsmodell von Deno das gleiche Isolation ohne Container: deno run --allow-net=api.openai.com,api.anthropic.com agent.ts.

Prüfung 4: Überprüfen Sie die Gefährdung durch Sicherheitsverletzungen, bevor Sie rotieren

Wenn sich Ihre Schlüssel auf einer Maschine befanden, die eine fehlerhafte Entriegelung berührte, drehen Sie sie. Keine Debatte. Aber auch Überprüfen Sie, ob die mit diesen Schlüsseln verknüpften Identitäten bereits in bekannten Dumps auftauchen. ein Laptop, der Wenn jemand letzten Monat eine kompromittierte LiteLLM-Version ausgeführt hat, könnte es sich um einen Laptop handeln, dessen Besitzer Passwörter wiederverwendet hat aus einem Dump der Collection 20191. Beide Probleme müssen behoben werden, und Check 4 zeigt Ihnen, um welche Konten es sich handelt brauchen die dringendste Aufmerksamkeit.

Botois /v1/breach/check Der Endpunkt umschließt die gleichen Datenquellen wie die meisten Unternehmens-IAMs Die Bezahlung der Tools erfolgt pro Arbeitsplatz und im kostenlosen Kontingent kostet es nichts:

Gehen Sie jede Dienstkonto-E-Mail, jede Maschinenbenutzer-E-Mail und jeden menschlichen Entwickler, dessen Laptop arbeitet, durch berührte das Fenster. Jede E-Mail mit password_exposed: true braucht eine Rotation und a Erzwungenes MFA-Reset, bevor Sie fortfahren. Leiten Sie die Ausgabe in Ihr Incident-Response-Runbook weiter. eins Curl pro Identität, zehn Minuten für eine 50-köpfige Engineering-Organisation.

Check 5: Beobachten Sie Ihren ausgehenden Datenverkehr

Nach der Installation installierte Malware muss irgendwie nach Hause rufen. Die meisten Entwickler können sich nicht an das letzte Mal erinnern Sie schauten, womit ihr Laptop tatsächlich kommunizierte. Das ist die Lücke, mit der TeamPCP gerechnet hat.

Auf einer verdächtigen Maschine erfahren Sie mit einem einzigen Befehl, was jeder Python- und Node-Prozess ist verbunden mit:

Leiten Sie auf Flottenebene jeden Entwickler-Laptop und CI-Runner durch einen Zero-Trust-Ausgang Zulassungsliste. Cloudflare WARP, Tailscale ACLs und Little Snitch geben Ihnen alle die gleiche Form: Listen Sie die Hostnamen auf, die Sie tatsächlich benötigen, blockieren Sie den Rest und machen Sie auf die Blöcke aufmerksam.

Eine so enge Zulassungsliste fühlt sich in der ersten Woche hart an. In der zweiten Woche sehen Sie nur noch folgende Warnungen: real: eine Bibliothek, die versucht, ein Ziel zu erreichen, das sie nicht erreichen kann. Genau das ist es signalisieren, dass der Infostealer von TeamPCP bei der Installation ausgelöst worden wäre.

Die fünf Checks im Überblick

Überprüfen Bemühung Reduzierung des Explosionsradius
Genaue Versionen mit Hashes anpinnen 1 Stunde für ein einzelnes Repo; 1 Tag für ein Monorepo Stoppt die stille Einführung einer kompromittierten Version
Verschieben Sie Anmeldeinformationen in kurzlebige Sitzungen 2 bis 4 Stunden pro Entwickler, einmalig Begrenzt Exfil auf 8 bis 12 Stunden Zugriff statt auf Monate
Sandboxen Sie jede Installation 15 Minuten pro neue Bibliotheksbewertung Der Installationszeitcode kann keine echten Geheimnisse oder das Produktnetzwerk sehen
Überprüfen Sie Identitäten, die mit offengelegten Schlüsseln verknüpft sind 10 Minuten für eine 50-Personen-Organisation Priorisiert Rotationen und MFA-Resets nach bekannter Exposition
Erzwingen Sie die Zulassungsliste für ausgehenden Traffic auf Entwickler und CI 1 Tag für die Konfiguration, kontinuierliche Wartung Blockiert Phone-Home-Kanäle, die gestohlene Daten weiterleiten

Wichtige Erkenntnisse

  • Pin-genaue Versionen, keine Bereiche. Ein Caretzeichen oder eine Tilde in Ihrer Sperrdatei ist ein Versprechen dass die morgige Veröffentlichung sicher ist. TeamPCP hat dieses Versprechen gebrochen.
  • Cloud-Anmeldeinformationen gehören nicht in Dev-Shells. Kurzfristige SSO-Sitzungen werden zu einem gestohlene Zugangsdaten in ein Rotationsereignis ein, nicht in einen Verstoß.
  • Sandbox wird installiert, bevor Sie ihnen vertrauen. Docker mit heruntergelassenen Kappen und --network=none reicht aus, um Malware während der Installation für den Preis von 15 Minuten abzufangen.
  • Rotieren und Durchbruchsprüfung. Wenn eine Maschine eine schlechte Freigabe berührt, drehen Sie sie alle Identität, die jede E-Mail gesehen und durchlaufen hat /v1/breach/check um diejenigen zu finden, die Ich brauche dringend MFA-Resets.
  • Egress-Zulassungslisten erwischen Phone-Home. Zero-Trust-Regeln für Laptops und CI werden zum Erfolg stille Exfiltration in ein lautes, protokolliertes, blockierbares Ereignis.

Botoi bietet Ihnen HTTP-Endpunkte für die Überprüfung von Sicherheitsverletzungen, Hash-Verifizierung, SSL-Inspektion und HTTP Header-Prüfung und NPM-Metadatensuche; die Grundelemente, die Sie zur Prüfung einer Lieferkette benötigen Vorfall ohne die Installation einer weiteren Bibliothek. Ein API-Schlüssel, 5 Anforderungen/Min. im kostenlosen Kontingent, nein Haken installieren. Durchsuchen Sie die interaktive Dokumente oder verkabeln MCP-Server hinein Claude Code oder Cursor, um dieselben Endpunkte von Ihrem Editor aus aufzurufen, während Sie durcharbeiten Checkliste.

FAQ

Welche LiteLLM-Versionen waren betroffen und wie bestätige ich, dass ich sauber bin?
Die bösartigen Veröffentlichungen tauchten im März 2026 auf und blieben lange genug auf PyPI, um weltweit in CI-Caches und Entwickler-Laptops zu landen. Führen Sie pip show litellm aus, um Ihre installierte Version zu drucken, und vergleichen Sie dann die Version und laden Sie den Zeitstempel mit der LiteLLM-Sicherheitsempfehlung und dem PyPI-Versionsverlauf hoch. Wenn ein Computer während des Fensters pip install litellm ausführte, behandeln Sie ihn als kompromittiert: Rotieren Sie jeden Cloud-Schlüssel, der sich in dieser Shell befand, stellen Sie ihn von einem sauberen Image erneut bereit und löschen Sie ~/.aws-, ~/.config/gcloud- und ~/.ssh-Token, die vor der Rotation datiert sind.
War das ein PyPI-Fehler oder ein LiteLLM-Fehler?
Beides, und das ist die Lektion. LiteLLM ist eine legitime Bibliothek mit einem echten Betreuer; Der Angreifer nutzte einen kompromittierten Release-Kanal, keinen Tippfehler. PyPI erfordert immer noch keine signierten Veröffentlichungen oder obligatorische 2FA für Token für jedes Projekt, sodass gestohlene Upload-Anmeldeinformationen innerhalb von Minuten in ausgelieferte Malware umgewandelt werden. Das Signieren von Paketen über Sigstore und vom Betreuer verwaltete Token hätte den Angriff beim Hochladen abgewehrt.
Muss ich jeden AWS-Schlüssel rotieren oder nur diejenigen, die auf den betroffenen Maschinen berührt werden?
Drehen Sie sie alle. Angreifer können sich durch STS, Übernahmeketten und kontenübergreifende Vertrauensrichtlinien bewegen, sobald sie über einen einzigen, langlebigen Schlüssel verfügen. Wenn der Laptop oder CI-Runner, der die fehlerhafte Version gesehen hat, IAM-Anmeldeinformationen im Speicher oder auf der Festplatte hatte, behandeln Sie den gesamten Hauptgraphen, der von dieser Identität aus erreichbar ist, als aktiv. Gleiche Logik für GCP-Dienstkonten und Azure-Dienstprinzipale.
Ändert Bun oder Deno dies für JavaScript-KI-Tools?
Ein wenig, nicht viel. Deno führt Code mit expliziten Berechtigungen aus (--allow-net, --allow-env), sodass eine Bibliothek, die plötzlich versucht, ~/.aws/credentials zu lesen, verweigert wird, es sei denn, Sie haben Dateisystemzugriff gewährt. Bun verfügt über das Flag --frozen-lockfile und führt in neueren Versionen standardmäßig keine Installationsskripte aus. Beides sind Verbesserungen gegenüber den NPM-Standardwerten, aber keines davon hindert eine Bibliothek daran, Daten zu exfiltrieren, sobald Ihr Anwendungscode ihr die Anmeldeinformationen zur Laufzeit übergibt.
Was unterscheidet das Lieferkettenrisiko der AI-Toolchain vom regulären NPM- oder PyPI-Risiko?
KI-Bibliotheken sind ungewöhnlich nah an Geheimnissen. Ein LLM-Wrapper wie LiteLLM benötigt API-Schlüssel für mehr als 10 Anbieter in einer Env-Datei. Ein LangChain-Agent liest AWS-Anmeldeinformationen, damit er S3 als Tool aufrufen kann. Ein Claude SDK berührt GITHUB_TOKEN, weil Sie es gebeten haben, PRs zu öffnen. Der Explosionsradius pro Installation ist höher als bei einer typischen Utility-Bibliothek; Mit einer kompromittierten Version erhalten Sie auf einen Schlag eine Brieftasche mit Anbieterschlüsseln, Cloud-Anmeldeinformationen und Zugriff auf den Quellcode.

Starte mit botoi zu entwickeln

150+ API-Endpunkte für Abfragen, Textverarbeitung, Bildgenerierung und Entwickler-Tools. Kostenloser Tarif, keine Kreditkarte nötig.