Gli sviluppatori della libreria Python LiteLLM, che conta 95 milioni di download al mese e 3,5 milioni nelle ultime 24 ore, hanno riportato una compromissione del progetto. Gli aggressori 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 rubare chiavi e password dai sistemi degli utenti. Al momento, le versioni dannose sono state rimosse da PyPI e il progetto è stato temporaneamente bloccato fino al termine dell'indagine.
Il token di accesso all'account LiteLLM su PyPI è finito nelle mani degli aggressori a causa dell'uso di un scanner di sicurezza delle dipendenze, trivvy, nel sistema di integrazione continua. In precedenza, alla fine di febbraio, gli aggressori erano riusciti ad accedere all'infrastruttura del progetto Trivy sfruttando una vulnerabilità nel gestore pull_request_target, eseguito nel sistema di integrazione continua di Trivy. Dopo la compromissione, gli aggressori hanno pubblicato versioni dannose di Trivy 0.69-0.69, sostituito il gestore GitHub Action trivy-action e caricato un'immagine Docker modificata con Trivy.
Il 24 marzo alle 11:30 (MSK), le credenziali dell'account 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 è stato compromesso; l'attività dannosa è stata osservata solo su PyPI. Nella versione LiteLLM 1.82.7, il codice dannoso è stato integrato nel file litellm/proxy/proxy_server.py e si è attivato all'importazione di litellm.proxy. Nella versione 1.82.8 è stato incluso un file site-packages/litellm_init.pth, e nel file proxy_server.py è stato aggiunto un gestore, imballato in formato base64 e attivato ad ogni avvio.
Il codice malevolo aggiunto eseguiva la scansione e l'invio di dati riservati. Sono stati inviati chiavi SSH e SSL/TLS trovate nel sistema, contenuto delle variabili d'ambiente, credenziali per AWS, GCP, Azure e K8s, chiavi da portafogli crittografici, password per i DBMS, cronologia delle operazioni nell'interprete dei comandi, file di configurazione di Git, CI/CD, gestori dei pacchetti e Docker. I dati trovati sono stati cifrati utilizzando algoritmi AES-256-CBC + RSA-4096 e inviati tramite una richiesta POST HTTP al sito "https://models.litellm.cloud/".un dominio litellm.cloud è stato registrato poche ore prima della pubblicazione delle versioni malevole.
Si raccomanda agli utenti di LiteLLM di verificare l'assenza del file litellm_init.pth nella directory site-packages, di aggiornare tutte le chiavi e le credenziali in caso di installazione delle versioni 1.82.7 o 1.82.8, di fissare versioni specifiche di LiteLLM nelle impostazioni di caricamento delle dipendenze e di confrontare le versioni utilizzate di LiteLLM con il codice delle versioni su GitHub.
Fonte: opennet.ru
