Kompromitovan LiteLLM 1.107.0 isporučivao kradljivac akreditiva

LiteLLM verzija 1.107.0 kompromitovana je u napadu na softverski lanac snabdevanja: zlonamerni PyPI wheel paketi i Docker slike isporučivali su kradljivac akreditiva i bekdor. Paket je stavljen u karantin na PyPI-ju, a sporni Docker imidži su uklonjeni, dok LiteLLM i dalje istražuje početni vektor napada.
Objava je povezana sa kompromitovanim GitHub nalozima
LiteLLM je utvrdio da su zlonamerne radnje izvršene preko GitHub naloga trojice inženjera, najverovatnije korišćenjem ukradenih GitHub CLI OAuth tokena. Jedan nalog je pokrenuo tok objavljivanja projekta, a drugi ga je odobrio.
Svi tokeni povezani sa incidentom su opozvani. Organizacija ipak nije potvrdila kako su tokeni pribavljeni, niti može da tvrdi da napadač nema dalji pristup pogođenim GitHub nalozima. Kao privremenu meru, LiteLLM je iz svoje GitHub organizacije uklonio sve korisnike osim jednog naloga koji nije pogođen.
Kompanija je takođe iz javnih registara uklonila pouzdane veze ka svojoj GitHub organizaciji, kako bi sprečila novo objavljivanje zlonamernih paketa. Pogođena distribucija obuhvata LiteLLM 1.107.0 za macOS, Linux i Windows, kao i izvorni arhiv litellm-1.107.0.tar.gz. Taj arhiv nema datoteke tereta, ali sadrži izmenjeni pyproject.toml.
Kod se pokretao pre uvoza LiteLLM biblioteke
Analiza je pokazala da se malver aktivira pri pokretanju Python interpretatora, pre nego što aplikacija uveze LiteLLM. Mehanizam je datoteka cook.pth, čija instrukcija import cook automatski pokreće kolektor podataka.
Prvi teret, nazvan privcollect, prikuplja cloud tokene, naloge programera, privatne ključeve, JSON datoteke sa akreditivima AI alata, promenljive okruženja i podatke iz pregledača Chromium i Firefox. Malver može da cilja i LiteLLM implementacije radi preuzimanja sačuvanih akreditiva proksija i konfiguracije modela.
Prikupljeni podaci pakuju se u GZIP-kompresovanu TAR arhivu i šalju HTTP POST zahtevom na litellm[.]dev/healthcheck. Drugi teret pokreće pozadinski demon koji na svakih sat vremena proverava GitHub lokaciju za instrukcije, zatim može da preuzme i izvrši Python kod koji napadač posluži. Navedeni GitHub repozitorijum u trenutku objave vraća grešku 404.
Šta treba uraditi u pogođenim okruženjima
Timovi koji su preuzeli LiteLLM 1.107.0 treba da iz čistog okruženja opozovu i zamene potencijalno izložene akreditive, uključujući cloud tokene, privatne ključeve i pristupne podatke AI alata. LiteLLM preporučuje zaključavanje verzije 1.106.2 pomoću digesta.
Ovaj slučaj pokazuje da provera samo naziva paketa nije dovoljna: objavljeni artefakti, identiteti koji odobravaju izdanje i tajne korišćene u CI/CD procesu moraju biti pod jednakim nadzorom. Za poslovne timove je praktičan prioritet da utvrde da li je verzija 1.107.0 ušla u razvojna, testna ili produkciona okruženja, pa da rotaciju tajni i proveru zavisnosti tretiraju kao jedinstven odgovor na incident.

