Com s’ha infectat LiteLLM amb un codi maliciós que esta robant milers de credencials? Al ser un paquet amb 97 milions de descàrregues mensuals, present al 36% de tots els entorns cloud, una tempesta perfecta, estem davant d’una bola de neu que comença a rodar.
LiteLLM és una biblioteca Python de codi obert nascuda per resoldre un dels grans mals de cap del desenvolupament amb intel·ligència artificial: la fragmentació. Cada proveïdor de models —OpenAI, Anthropic, Google, Mistral, Cohere— té la seva pròpia API, els seus propis formats, les seves pròpies convencions. LiteLLM actua com a capa d’abstracció universal: una sola crida, centenars de models. En poques paraules, és el proxy que connecta qualsevol aplicació d’IA amb qualsevol model del mercat.
El paquet rep aproximadament 97 milions de descàrregues mensuals , i és present al 36% de tots els entorns cloud . Això el converteix en infrastructura crítica de facto per a milers d’aplicacions, pipelines d’IA i entorns de producció a tot el món. I precisament la seva posició privilegiada, accés a totes les claus API de LLMs d’una organització, l’ha convertit en un objectiu perfecte.
L’atac contra LiteLLM va ser via tercers, via dependències, en aquest cas via Trivy, que havía estat infectat uns dies abans. El pipeline CI de LiteLLM instal·lava Trivy via apt sense fixar cap versió concreta. Quan el pipeline va córrer el 23 de març, va descarregar la versió infectada de Trivy. L’infostealer dins de Trivy va executar-se a l’entorn CI de LiteLLM i va recopilar-ho tot, incloent-hi la variable PYPI_PUBLISH_PASSWORD del compte del mantenidor. Amb aquella credencial a la mà, TeamPCP, els atacants, tenia les claus del regne.
El 24 de març, els atacants van publicar litellm 1.82.7 a les 10:39 UTC i 1.82.8 a les 10:52 UTC, cada versió amb un mecanisme d’infecció diferent i més agressiu que l’anterior.
La versió 1.82.7 amagava el codi maliciós dins de litellm/proxy/proxy_server.py: s’activava en qualsevol importació del mòdul. La 1.82.8 anava més lluny: afegia un fitxer litellm_init.pth a site-packages/, un mecanisme que s’activa en cada inici de l’intèrpret Python, sense necessitat de cap importació, fins i tot quan s’executa pip o l’IDE . Simplement tenir el paquet instal·lat era suficient per ser compromès.
Un cop activat, el malware desplegava una cadena d’infecció en múltiples etapes: recollia claus SSH, credencials cloud d’AWS, GCP i Azure, secrets de Kubernetes, fitxers d’entorn, configuracions de bases de dades i carteres de criptomonedes. Les dades s’encriptaven i s’enviaven comprimides en un fitxer tpcp.tar.gz a un domini controlat pels atacants.
Les versions afectades van estar disponibles a PyPI aproximadament tres hores abans que la plataforma les posés en quarantena. La comunitat va obrir l’issue #24512 per reportar la bretxa, però els atacants, amb el compte del mantenidor compromès, el van tancar com a “not planned”. Una última humiliació abans de ser expulsats.
La versió 1.82.6 és la darrera confirmada com a neta. Si heu executat les versions 1.82.7 o 1.82.8, heu de considerar el vostre entorn totalment compromès i rotar totes les credencials sense excepció.




