Za samo 40 minuta zatrovani LiteLLM izložio tajne 2.500 organizacija
O ovom napadu smo pisali u martu. Tada se znalo šta se kralo, ali se nije znalo dokle se u tome stiglo. Zatrovane verzije LiteLLM 1.82.7 i 1.82.8 su stajale na zvaničnom PyPI repozitorijumu 24. marta, ne duže od četrdesetak minuta. LiteLLM je alat koji sa jednog mesta upravlja različitim AI modelima, pa uglavnom živi na mašinama koje samostalno sklapaju i objavljuju softver. Te mašine su najčešće bez čoveka za tastaturom, pa u sebi moraju da drže ključeve za cloud, repozitorijume i baze, jer nema ko da ih unosi. Napadači iz grupe TeamPCP nisu ciljali LiteLLM direktno, već su zarazili Trivy, alat za proveru ranjivosti koji je LiteLLM povukao u svoje razvojno okruženje. Zatrovani kod je odatle ušao u zvanično izdanje LiteLLM-a koje je inficiralo svaku mašinu koja ga je preuzela. CloudSEK ceo lanac sažima u jednu rečenicu: samo jedan neponišteni ključ i pukle su tri karike u lancu snabdevanja. Četrdeset minuta infiltracije je bilo dovoljno za katastrofu. LiteLLM nije ni morao da se koristi — maliciozni kod se izvršavao samostalno, čim bi se u okruženju pokrenuo bilo koji Python program. Kupio je cloud ključeve, GitHub i GitLab tokene, SSH ključeve, Kubernetes tajne, lozinke baza i ključeve AI servisa. CloudSEK je izložene podatke povezao sa više od 2.500 organizacija i oko 434.000 izvršavanja, uz izričitu ogradu da to ne znači da je svaka firma zaista kompromitovana niti da je svaki ključ već zloupotrebljen. Na spisku su AWS, Nvidia, Cisco, Salesforce, Siemens, London Stock Exchange Group, Volkswagen — što znači da su njihovi podaci nađeni u skupu, ne da je napadač ušao u svaku od tih kompanija. Hudson Rock navodi da je nezavisno došao do sirove arhive napadača i iz nje povezao 118.829 zapisa sa build mašina, sa 2.488 poslovnih domena. LiteLLM navodi da njegov zvanični Docker image nije bio pogođen, već samo te dve verzije sa PyPI-ja.
Napad nije počeo od LiteLLM-a, nego od ukradenog ključa koji je jedan od dobavljača zaboravio da poništi. To je cela priča: mašina veruje alatu, alat veruje ključu, a ključ je u tuđim rukama. Ali najgore tek dolazi. Istraživač Kevin Beaumont navodi da je od jedne velike kompanije sa spiska dobio informaciju da je, potaknuta ovom vešću, zamenila sve svoje ključeve. Kada je uz njenu dozvolu proverio tu tvrdnju, gotovo svi stari ključevi su i dalje bili aktivni. Jer, promeniti ključ i poništiti stari nisu ista stvar. Identična greška stoji na oba kraja ove priče — od neponištenog ključa je krenuo napad, a neponišteni ključevi ga, četiri meseca kasnije, i dalje drže u životu. Pritom, ne pričamo o 2.500 maloprodajnih objekata neke globalne kompanije. Pričamo o 2.500 kompanija, od najmanjih do najvećih na svetu.
- Proveri da li su LiteLLM 1.82.7 ili 1.82.8 ikada pokrenuti na razvojnoj mašini ili u CI/CD pipeline-u, čak i ako su kasnije uklonjeni
- Ako jesu, smatraj izloženim sve tajne kojima je to okruženje tada moglo da pristupi: cloud ključeve, GitHub i GitLab PAT-ove, Kubernetes tokene, SSH ključeve, kredencijale baza i AI API ključeve
- Poništi stare kredencijale pre izdavanja novih; zamena bez poništenja ostavlja stari ključ da i dalje radi
- Pregledaj cloud, GitHub, GitLab i Kubernetes logove od 24. marta nadalje, tražeći upotrebu starih ključeva sa neočekivanih lokacija i servisa
- Popiši koje alate tvoj build sistem sam povlači i sa kojim pravima to radi; lanac je i počeo tako što je jedna mašina bez pitanja preuzela zatrovan alat
- Proveri i ostatak TeamPCP traga — Trivy, KICS i Telnyx — ako se ti alati koriste u istim razvojnim procesima