LiteLLM hat eine Hintertür: Überprüfen Sie diese Woche Ihre KI-Toolchain
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.
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, Undknown_hosts~/.aws/credentialsUnd~/.aws/configProfile~/.azure/Token und Anmeldeinformationen aktualisieren- GCP
application_default_credentials.jsonund Dienstkonto-JSON-Dateien ~/.docker/config.jsoneinschließ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 loginDie Sitzungsdauer ist auf 8 bis 12 begrenzt Stunden. Löschen~/.aws/credentials. Alles sollte durchgehen~/.aws/ssoCache, der von selbst abläuft. -
GCP:
gcloud auth application-default loginmit--lifetime=43200. Widerrufen Sie langlebige JSONs für Dienstkonten, die sich auf Laptops befinden. Verwenden Sie die Workload Identity Federation von CI. -
Azurblau:
az loginmit 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 runodervault 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=nonereicht 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/checkum 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.