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.