Grupul de hackeri cunoscut sub numele de TeamPCP a compromis pachetul LiteLLM din depozitul PyPI și a publicat versiuni rău intenționate în ultimele zile. Biblioteca Python, care acționează ca unificator de acces la mai mulți furnizori mari de modele de limbă printr-un singur API, a înregistrat peste 95 de milioane de descărcări în ultima lună și depășește 3,4 milioane de descărcări zilnice. Versiunile 1.82.7 și 1.82.8 conțineau cod rău intenționat capabil să colecteze acreditări sensibile și să instaleze mecanisme de persistență în mediile afectate. Especialistas a identificat incidentul pe 24 martie 2026, iar versiunile compromise au fost eliminate rapid din PyPI.
LiteLLM servește ca o poartă comună pentru integrarea serviciilor de inteligență artificială în proiecte de dezvoltare. Importul Qualquer al modulului afectat a declanșat sarcina utilă ascunsă. Endor Labs a detaliat că codul rău intenționat a fost injectat în anumite fișiere din pachet, inclusiv proxy_server.py și un fișier .pth care rulează automat la pornirea interpretului Python.
- Verificarea imediată a instalărilor versiunilor 1.82.7 sau 1.82.8 în medii on-premise și conducte CI/CD.
- Rotire urgentă a tuturor cheilor SSH, token-urilor cloud și secretelor expuse.
- Inspectarea artefactelor, cum ar fi fișierele .pth suspecte și serviciile systemd deghizate.
Mecanism de injectare a codului rău intenționat
Actorii rău intenționați au inserat încărcătura utilă codificată base64 în fișierul litellm/proxy/proxy_server.py în versiunile compromise. Sarcina utilă Essa este decodificată și executată de fiecare dată când modulul este importat. Versiunea 1.82.8 a adăugat și un fișier litellm_init.pth care garantează execuția automată ori de câte ori este pornit mediul Python, extinzând sfera atacului chiar și fără utilizarea directă a bibliotecii.
Sarcina utilă urmează o secvență bine definită în trei pași. Primeiro, efectuează recunoașterea sistemului cu comenzi precum hostname, whoami, uname și ip addr. Apoi colectează diverse acreditări, inclusiv chei SSH, configurații cloud pentru AWS, GCP și Azure, jetoane de serviciu Kubernetes, fișiere .env, acreditări ale bazei de date, chei TLS private și date portofel de criptomonede. În cele din urmă, încearcă deplasarea laterală pe clusterele Kubernetes prin implementarea podurilor privilegiate pe fiecare nod.
Acreditări și detalii secrete de furt
Grupurile de infostealer variante TeamPCP Cloud Stealer au colectat date într-un fișier criptat tpcp.tar.gz. Fișierul Esse este trimis către infrastructura controlată de atacator din domeniul models.litellm.cloud. Un serviciu systemd deghizat ca „Telemetria Sistema Service” menține contact periodic cu checkmarx.zone pentru a descărca încărcături suplimentare și pentru a asigura persistența.
Dezvoltatorii care folosesc LiteLLM în conductele AI sau aplicații care accesează mai mulți furnizori LLM se confruntă cu un risc crescut de expunere. Atacul moștenește asemănări tehnice cu compromisul anterior al scanerului Aqua Security al lui Trivy, atribuit de asemenea aceluiași grup. Relatos indică faptul că au avut loc sute de mii de extrageri de date, deși numerele exacte rămân în curs de verificare independentă.
Atacurile anterioare ale grupului TeamPCP
TeamPCP a angajat deja proiectul Trivy și componentele conexe ale lui Aqua Security în viitorul apropiat. Secvența Essa de incidente demonstrează un accent pe instrumentele adoptate pe scară largă în lanțul de dezvoltare software, în special pe cele integrate cu fluxuri CI/CD și medii native cloud. Grupul a explorat, de asemenea, clustere Kubernetes cu scripturi care diferențiază comportamentele în funcție de regiune geografică.
Persistența instalată include backdoor systemd care preia automat fișiere binare suplimentare. Analistas au observat încercări de a șterge complet sistemele în configurații specifice detectate, în timp ce în alte cazuri accentul rămâne pe colecția tacută de secrete.
Măsuri recomandate pentru organizațiile afectate
Organizațiile ar trebui să verifice jurnalele de instalare și să facă imediat upgrade la versiunea 1.82.6 sau o versiune ulterioară, care este considerată curată. Rotirea tuturor secretelor și jetoanelor găsite pe dispozitivele potențial afectate este o acțiune prioritară pentru a limita daunele. Busca pentru fișierele suspecte, cum ar fi ~/.config/sysmon/sysmon.py, /tmp/pglog și pod-urile necinstite din spațiul de nume kube-system ajută la identificarea compromisurilor reziduale.
Monitorizarea traficului de ieșire către domeniile asociate cu atacatorii completează acțiunile inițiale. Especialistas consolidează faptul că rotația regulată a acreditărilor reduce semnificativ riscul atacurilor în cascadă în lanțul de aprovizionare cu software. Personalul de securitate Equipes trebuie să inspecteze mediile Kubernetes pentru deplasări laterale neautorizate.
Analiză tehnică persistentă a sarcinii utile
Ușa din spate instalată ca serviciu de utilizator systemd menține comunicarea cu serverul de la distanță pentru a primi instrucțiuni suplimentare. Arhitectura Essa permite atacatorilor să extindă controlul asupra sistemelor infectate în timp. Mecanismul de exfiltrare criptează datele înainte de trimitere, ceea ce face dificilă detectarea în tranzit.
Dezvoltatorii care mențin dependențe Python în medii sau containere partajate ar trebui să auditeze istoricul instalărilor recente. Popularitatea LiteLLM în proiectele de inteligență artificială crește potențiala acoperire a incidentului în ecosistemele moderne de dezvoltare.
Actualizări privind eliminarea versiunilor rău intenționate
Versiunile 1.82.7 și 1.82.8 au fost retrase din PyPI după identificarea problemei. Mantenedores din proiect a emis alerte de securitate și îndrumări pentru utilizatori. Comunitatea de securitate urmărește cazul pentru a mapa posibilele impacturi asupra depozitelor care depind tranzitiv de LiteLLM.
Cercetătorii continuă să analizeze mostre de malware pentru a identifica noi variante sau comportamente suplimentare. Usuários care a instalat versiunile afectate trebuie să trateze toate acreditările prezente pe sistemele lor ca fiind potențial expuse.