Gli sviluppatori della libreria Python LiteLLM, che conta 95 milioni di download al mese e 3,5 milioni nelle ultime 24 ore, hanno comunicato la compromissione del progetto. Gli attaccanti sono riusciti a intercettare le credenziali del maintainer e a pubblicare su PyPI due versioni dannose — 1.82.7 e 1.82.8, contenenti codice per il furto di chiavi e password dai sistemi degli utenti. Attualmente, le versioni dannose sono state rimosse da PyPI e il progetto è temporaneamente sospeso fino al termine dell'indagine.
Il token di accesso all'account LiteLLM su PyPI è caduto nelle mani degli attaccanti a causa dell'uso, nel sistema di integrazione continua, di uno scanner di sicurezza delle dipendenze chiamato trivvy. Prima di questo, alla fine di febbraio, gli attaccanti erano riusciti a ottenere accesso all'infrastruttura del progetto Trivy sfruttando una vulnerabilità nel gestore pull_request_target, attivato nel sistema di integrazione continua di Trivy. Dopo la compromissione, gli attaccanti hanno pubblicato versioni dannose di Trivy 0.69-0.69, sostituendo il gestore GitHub Action trivy-action e inserendo un'immagine Docker modificata contenente Trivy.
Il 24 marzo alle 11:30 (MSK), le credenziali intercettate del maintainer di LiteLLM (krrishdholakia) sono state utilizzate per pubblicare direttamente versioni dannose di LiteLLM 1.82.7 e 1.82.8 su PyPI, bypassando il CI/CD ufficiale di GitHub. Il repository del progetto su GitHub non ha subito danni: l'attività malevola è stata osservata solo su PyPI. Nella versione LiteLLM 1.82.7, il codice dannoso è stato incorporato nel file litellm/proxy/proxy_server.py e si è attivato all'importazione di litellm.proxy. Nella versione 1.82.8 è stato incluso il file site-packages/litellm_init.pth, e nel file proxy_server.py è stato aggiunto un gestore, impacchettato in formato base64 e attivato ad ogni avvio.
Il codice dannoso aggiunto eseguiva la scansione e l'invio di dati riservati. Sono stati inviati chiavi SSH e SSL/TLS trovate nel sistema, il contenuto delle variabili d'ambiente, credenziali per AWS, GCP, Azure e K8s, chiavi per portafogli crittografici, password per i database, cronologia delle operazioni nel terminale, file di configurazione da Git, CI/CD, gestori di pacchetti e Docker. I dati trovati venivano crittografati utilizzando algoritmi AES-256-CBC + RSA-4096 e inviati tramite una richiesta HTTP POST al sito "https://models.litellm.cloud/" (dominio litellm.cloud è stato registrato poche ore prima della pubblicazione delle versioni dannose).
Si consiglia agli utenti di LiteLLM di verificare l'assenza del file litellm_init.pth nella directory site-packages, aggiornare tutte le chiavi e le credenziali in caso di installazione della versione 1.82.7 o 1.82.8, fissare versioni specifiche di LiteLLM nei parametri di caricamento delle dipendenze e confrontare le versioni utilizzate di LiteLLM con il codice delle versioni su GitHub.
Fonte: opennet.ru
