LiteLLM incident: ukradeni GitHub tokeni i kompromitovano izdanje

LiteLLM je potvrdio kompromitovanje svog lanca isporuke nakon što je master ključ za implementaciju LiteLLM Agent Platforme greškom objavljen u javnom GitHub repozitorijumu u maju 2026. Napadač je 10. oktobra iskoristio ključ koji nije bio opozvan, preuzeo GitHub CLI OAuth token i 21. oktobra objavio zlonamernu verziju LiteLLM 1.107.0 na PyPI, a zatim i slike na Docker Hub-u i GHCR-u.
Objavljeni ključ poticao je iz konfiguracionog fajla u repozitorijumu LiteLLM-Labs/lite-harness. Iako je sporni commit uklonjen force-push postupkom i identifikovane su tajne koje treba opozvati, master ključ nije opozvan. Time je ostao važeći dovoljno dugo da omogući pristup Agent Platformi.
Od ključa platforme do kontrole nad izdanjem
Platforma je sadržala GitHub CLI OAuth token koji su samostalno hostovani cloud agenti koristili za podnošenje pull requestova. Token nije bio ograničen na nužni obim ovlašćenja i bio je vezan za nalog vlasnika GitHub organizacije. Napadač je tako stekao vlasnički pristup repozitorijumima i mogućnost daljeg prikupljanja kredencijala.
U kratkotrajnim granama nazvanim ci-tmp-a351cc i ci-tmp-4d8517 dodati su GitHub Actions tokovi u fajlu .github/workflows/cache.yml. Tokovi su se pokretali pri svakom push-u ili tagu, a zatim su grane brisane u roku od nekoliko minuta. Socket je naveo da su tokovi prikupljali GitHub tokene, ključeve za LiteLLM, Together AI, Linear, GitHub App, kao i dodatne tajne za Anthropic, OpenAI, AWS Bedrock, Tavily i GitGuardian.
Prikupljani su i Playwright storage state, podaci za PostgreSQL i Redis, kao i različiti podaci za pristup razvojnim alatima. Podaci su slati na dve adrese webhook[.]site. Takav obrazac pokazuje zašto brisanje privremenih grana ne sme biti jedini oslonac za nadzor: evidencije aktivnosti, zaštita tokova rada i kontrola tajni moraju obuhvatiti i kratkotrajne promene.
Izmena release procesa i posledice za korisnike
Napadač je 21. oktobra zaobišao zaštitu grana i izmenio release pipeline tako da preuzima izvor iz nalikovanog repozitorijuma Berri-AI/litellm umesto BerriAI/litellm. LiteLLM 1.107.0 objavljen je na PyPI u 11.46 UTC, dok su Docker Hub i GHCR slike objavljene ubrzo potom. PyPI je verziju stavio u karantin u 13.23 UTC, a kompromitovane Docker oznake su uklonjene ili preusmerene na proverene slike.
Zlonamerni paket je sadržao mehanizme koji se automatski izvršavaju pri pokretanju Python-a, čak i kada aplikacija ne uvozi LiteLLM. Jedan deo je ciljao autentikacioni materijal iz razvojnih alata, AI aplikacija, cloud okruženja i pregledača, dok je Unix backdoor kao pozadinski proces na svakih sat preuzimao i izvršavao kod koji odredi napadač.
Microsoft Security Research upozorio je da su se startup fajlovi nalazili van direktorijuma LiteLLM aplikacije, pa samo uklanjanje paketa nije nužno uklanjalo sve zlonamerne komponente. LiteLLM je saopštio da radi na opozivu svih tokena povezanih sa internim sistemima i platformama dobavljača.
Operativna pouka za razvojne organizacije
Ovaj incident povezuje četiri konkretna propusta: javno objavljenu tajnu, neizvršen opoziv, token sa preširokim privilegijama i oslabljen proces odobravanja izdanja. Timovi zato treba da tretiraju izložene ključeve kao hitan bezbednosni događaj, ograniče tokene na najmanji potreban skup prava i zaštite CI/CD izmene nezavisnim, proverljivim kontrolama. Posebno je važno proveriti zavisnosti i slike preuzete u periodu kompromitovanja, kao i moguće trajne izmene u Python startup okruženju.

