LiteLLM är ett mycket populärt Python-bibliotek och proxyserver med öppen källkod som tillhandahåller ett enhetligt gränssnitt för anrop av över 100 Large Language Model (LLM) API:er, t.ex. OpenAI, Anthropic, Bedrock och VertexAI, med hjälp av OpenAI:s standardformat för in- och utdata. Det förenklar integrationen av flera LLM och erbjuder funktioner som automatiska fallbacks, omförsök och kostnadsspårning. Eftersom det fungerar som en API-gateway, fungerar det som en referensaggregator genom design, och håller API-nycklar för olika LLM-leverantörer på ett säkert sätt.
Översikt av LiteLLM
LiteLLM används i stor utsträckning av organisationer som Stripe, Netflix och Google ADK. Dessutom hanterar det över 95 miljoner nedladdningar varje månad och är starkt beroende av som ett transitivt beroende i stora AI-agentramverk, inklusive CrewAI, DSPy, Opik, Browser-Use, MLflow och OpenHands.
En ekonomiskt motiverad hotaktörsgrupp känd som TeamPCP (även spårad som DeadCatx3, PCPcat, ShellForce och CipherForce) genomförde en kritisk attack mot programvaruförsörjningskedjan på det officiella `litellm`-paketet på Python Package Index (PyPI). TeamPCP, som enligt uppgift samarbetar med utpressningsgruppen LAPSUS$, riktade in sig på PyPI-publiceringsuppgifterna för LiteLLM:s VD och huvudunderhållare, Krrish Dholakia.
Vem och vad påverkades?
Angriparna publicerade två skadliga versioner med bakdörr (1.82.7 och 1.82.8) direkt till PyPI och kringgick därmed helt den officiella GitHub CI/CD-utgivningsprocessen:
- Version 1.82.7 innehöll en injicerad base64-kodad nyttolast i `litellm/proxy/proxy_server.py` som exekverades skadligt när modulen importerades.
- Version 1.82.8 innehöll en mycket farlig fil `litellm_init.pth` som placerades i hjulroten. Pythons inbyggda sökvägskonfigurationsfunktioner bearbetar `.pth`-filer automatiskt vid tolkens start. Detta innebar att skadlig programvara kördes i bakgrunden varje gång en Python-process startade, oavsett om användaren uttryckligen importerade LiteLLM.
Alla organisationer, utvecklare, CI/CD-pipelines eller Docker-byggprocesser som körde `pip install litellm` (eller drog det som ett opinnat transitivt beroende) den 24 mars 2026, mellan 10:39 UTC och cirka 16:00 UTC, påverkas.
Vem påverkas INTE: Användare av den officiella Docker-bilden för LiteLLM Proxy (`ghcr.io/berriai/litellm`) och LiteLLM Cloud utsattes inte för någon fara, eftersom deras beroenden var strikt kopplade till säkra versioner.
Den skadliga programvaran släppte loss en förödande trestegsattack:
- Systematisk skörd av referenser: Den svepte drabbade system och samlade in LLM API-nycklar, SSH-nycklar, AWS / GCP / Azure-molnuppgifter, Kubernetes servicekontotokens, Docker-registrets auth-tokens, databasanslutningssträngar, Git-uppgifter, shellhistorik, CI / CD-hemligheter och cryptocurrency-plånböcker.
- Exfiltrering: De stulna uppgifterna samlades i ett arkiv (`tpcp.tar.gz`), krypterades med hjälp av ett hybrid AES-256 och RSA-4096-schema och skickades tyst till det angriparkontrollerade `models.litellm[.]cloud`.
- Lateral förflyttning och uthållighet: På Kubernetes-kluster användes tillgängliga servicekontotokens för att läsa alla klusterhemligheter och distribuera en mycket privilegierad `alpine:latest`-pod (`node-setup-*`) till varje nod. Sedan installerades en ihållande systembakdörr (`sysmon.py` och `sysmon.service`) som regelbundet pollade `checkmarx[.]zone/raw` för att ladda ner och exekvera godtyckliga nyttolaster i andra steget från angriparna.
Tidslinje för händelser
- Sent i februari 2026: En autonom AI-bot med namnet "hackerbot-claw" utnyttjade ett felkonfigurerat arbetsflöde för dragförfrågningar i Aqua Securitys Trivy-arkiv och stal en privilegierad GitHub-token.
- 19 mars 2026: TeamPCP använde återstående åtkomst från Trivy-intrånget för att distribuera en legitimationsstjälande Trivy-binär och förgiftade GitHub-åtgärder. Eftersom LiteLLM använde Trivy i sitt eget CI/CD-arbetsflöde för säkerhetsskanning utan att fästa versionen, skördade den komprometterade Trivy-skannern tyst LiteLLM: s `PYPI_PUBLISH`-token.
- 20-23 mars 2026: Hotaktörerna distribuerade en självspridande mask ("CanisterWorm") över npm-ekosystemet och komprometterade Checkmarx KICS GitHub-åtgärder. De registrerade också en skadlig exfiltreringsdomän, `models.litellm[.]cloud`, för att efterlikna legitim LiteLLM-infrastruktur och en C2-domän `checkmarx[.]zone`.
- 24 mars 2026, 10:39 UTC: TeamPCP använde den stulna PyPI-token för att publicera den skadliga `litellm` version 1.82.7 till PyPI.
- 24 mars 2026, 10:52 UTC: Angriparna eskalerade attacken genom att publicera version 1.82.8, som lade till den aggressiva `.pth`-filkörningsvektorn.
- 24 mars 2026, 11:48 UTC: Säkerhetsforskare på FutureSearch upptäckte kompromissen efter att den skadliga programvarans `.pth`-leveransmekanism av misstag skapade en exponentiell "gaffelbomb" som kraschade deras system.
- 24 mars 2026, 12:44 UTC: Angriparna använde ett botnät för att spamma GitHub-avslöjandefrågan och använde komprometterade underhållarkonton för att tillfälligt förstöra arkiv och stänga frågan som "inte planerad" för att störa incidentresponsen.
- 24 mars 2026, 13:38 UTC: PyPI:s säkerhetsteam har framgångsrikt satt hela `litellm`-projektet i karantän, vilket blockerar ytterligare nedladdningar.
- 24 mars 2026, 15:27 UTC: De skadliga versionerna raderades permanent, underhållarkonton återställdes och alla nycklar roterades framgångsrikt.
Rekommenderadeåtgärder
Om du misstänker att ditt system, din CI/CD-pipeline eller Docker-avbildning har stött på `litellm` 1.82.7 eller 1.82.8 måste du omedelbart vidta följande åtgärder:
- Identifiera exponeringen: Kontrollera alla Python-miljöer för att se om versionerna 1.82.7 eller 1.82.8 för närvarande är installerade (`pip show litellm | grep Version`), och sök uttryckligen efter förekomsten av filen `litellm_init.pth` i `site-packages`.
- Anta fullständig kompromettering och rotera hemligheter: Om någon av versionerna fanns måste du anta att alla referenser, molntoken, databaslösenord, LLM-nycklar och SSH-nycklar som är tillgängliga för miljön har stulits. Rotera alla referenser omedelbart.
- Eliminera uthållighet: Stoppa och inaktivera systemd-enheten `sysmon.service` och radera `~/.config/sysmon/sysmon.py`, `/tmp/pglog` och `/tmp/.pg_state`. I Kubernetes-miljöer ska du noggrant granska namnrymden `kube-system` och ta bort alla angripande pods som matchar `node-setup-*`.
- Rensning och återuppbyggnad av miljöer: Nedgradera inte bara paketet. Ta bort och återskapa Pythons virtuella miljöer helt och hållet. Rensa lokala cacheminnen för pakethanterare (`pip cache purge` eller `rm -rf ~/.cache/uv`) för att förhindra oavsiktlig ominstallation av cachade skadliga hjul. Återuppbygg berörda CI-miljöer från rena basavbildningar.
- Fäst beroenden: Se till att dina miljöer är kopplade till den senast kända rena versionen (`litellm==1.82.6` eller tidigare).
- Blockera skadlig infrastruktur: Blockera utgående nätverksanslutningar och DNS-upplösning för de kända IOC:erna vid din nätverksperimeter.
Indikatorer på kompromettering (IOC)
|
Kategori (IOC)
|
Indikator
|
Beskrivning
|
|
Filens hash
|
8395c3268d5c5dbae1c7c6d4bb3c318c752ba4608cfcd90eb97ffb94a910eac2
|
1.82.7 hjul (SHA-256)
|
|
Filens hash
|
d2a0d5f564628773b6af7b9c11f6b86531a875bd2d186d7081ab62748a800ebb
|
1.82.8 hjul (SHA-256)
|
|
Filens hash
|
71e35aef03099cd1f2d6446734273025a163597de93912df321ef118bf135238
|
litellm_init.pth (SHA-256)
|
|
Filens hash
|
a0d229be8efcb2f9135e2ad55ba275b76ddcfeb55fa4370e0a522a5bdee0120b
|
Skadlig proxy_server.py (SHA-256)
|
|
Nätverk
|
modeller.litellm[.]moln
|
Primär slutpunkt för exfiltrering
|
|
Nätverk
|
checkmarx[.]zone
|
C2-ändpunkt för persistens
|
|
Nätverk
|
checkmarx[.]zon/raw
|
Polling-slutpunkt för leverans av nyttolast
|
|
Filsystem
|
.../site-paket/litellm_init.pth
|
Nyttolast för start av tolkprogram
|
|
Filsystem
|
~/.config/sysmon/sysmon.py
|
Skript för permanent bakdörr (även i /root/)
|
|
Filsystem
|
~/.config/systemd/user/sysmon.service
|
Skadlig enhet ("System Telemetry Service")
|
|
Filsystem
|
/tmp/pglog
|
Nedladdad binär nyttolast
|
|
Filesystem
|
/tmp/.pg_state
|
Spårningsfil för skadlig programstatus
|
|
Filsystem
|
tpcp.tar.gz
|
Arkiv för exfiltrering
|
|
Kubernetes
|
Pods: node-setup-*
|
Ligger i namnrymden kube-system
|
|
Kubernetes
|
Containeravbildning: alpine:senaste
|
Används inom installationsbehållaren
|
Om du är orolig för något av de hot som beskrivs i den här bulletinen eller behöver hjälp med att avgöra vilka åtgärder du bör vidta för att skydda dig mot de mest väsentliga hoten mot din organisation, vänligen kontakta din kontoansvarige, eller alternativt kontakta oss för att ta redapå hur du kan skydda din organisation.