Komprometimi i LiteLLM 1.107.0 përhapi malware për vjedhjen e kredencialeve
LiteLLM 1.107.0 u publikua me malware që vidhte kredenciale, pasi një sulmues i panjohur përdori një master key të ekspozuar më parë për të marrë kontrollin e repository të projektit në GitHub dhe të procesit të publikimit. Paketa e komprometuar Python mbërriti në Python Package Index (PyPI), një shërbim që përdoret për shpërndarjen e software Python, si dhe në Docker Hub dhe GitHub Container Registry (GHCR), më 21 tetor 2026.
Incidenti filloi më 27 maj 2026, kur një file konfigurimi, i përfshirë përmes një commit në repository publik LiteLLM-Labs/lite-harness, ekspozoi master key për një deployment të LiteLLM Agent Platform. Agent Platform është një mjet open-source që projekti e përdorte për të bashkërenduar agjentët software. LiteLLM tha se gabimi u vu re shpejt dhe commit publik u mbishkrua me një force push. Kredencialet e ekspozuara u identifikuan për revokim, por vetë master key nuk u revokua.
Më 10 tetor, një sulmues i panjohur që lidhej nga 69.48.229[.]143 përdori atë key për të hyrë në Agent Platform. Prej andej, sulmuesi siguroi një OAuth token të ndërfaqes command-line të GitHub, një kredencial digjital që i lejon një aplikacioni të veprojë përmes një llogarie GitHub. Shërbimi e përdorte këtë OAuth token që agjentët cloud të hostuar nga vetë organizata të mund të dërgonin pull requests. LiteLLM tha se OAuth token nuk ishte kufizuar në një grup të ngushtë permissions dhe i përkiste një pronari të organizatës së tij në GitHub, duke i dhënë sulmuesit akses të nivelit owner në të gjitha repository e organizatës.
Midis orës 10:11 dhe 10:12 p.m. UTC të asaj dite, sulmuesi krijoi branch të përkohshëm në BerriAI/litellm dhe BerriAI/litellm-auto. GitHub workflow keqdashës, që janë detyra të automatizuara të ekzekutuara brenda një repository, u përdorën për të marrë OAuth token që u përkisnin dy inxhinierëve me akses maintainer. Kredencialet u dërguan në një adresë webhook[.]site të kontrolluar nga sulmuesi dhe ekzekutimet e workflow u fshinë pak minuta më vonë.
Socket rikuperoi më vonë dy commit keqdashës që vendosnin një file në .github/workflows/cache.yml. Njëri u krijua në orën 10:11:45 p.m. UTC më 10 tetor dhe një tjetër pasoi më 12 tetor. Secili përdorte një branch jetëshkurtër të bazuar në një commit legjitim të kohëve të fundit, shtonte workflow me titullin në dukje të padëmshëm “ci: bump cache config”, ekzekutohej sa herë që bëhej push i kodit ose i një tag dhe më pas fshinte branch. Emrat e branch ishin ci-tmp-a351cc dhe ci-tmp-4d8517, duke lënë pak gjurmë të dukshme në historikun e zakonshëm të repository.
Workflow mblodhën kredenciale GitHub, një identifikues GitHub App dhe signing key, si dhe materiale aksesi për Linear, deployment e LiteLLM dhe Together AI. Versioni i 12 tetorit e zgjeroi mbledhjen te kredencialet e application programming interface (API) për Anthropic, OpenAI, AWS Bedrock, Tavily dhe GitGuardian. Ai synoi gjithashtu të dhënat e browser session të Playwright, hollësitë e lidhjes për bazën e të dhënave open-source, si dhe adresat, portat dhe fjalëkalimet Redis. Socket vuri në dukje se një Playwright session i vlefshëm mund të mundësonte akses në llogarinë përkatëse Linear pa vendosur fjalëkalim ose pa përfunduar multi-factor authentication. Një kredencial GitGuardian mund të ekspozonte dhe potencialisht të mundësonte kontrollin mbi alert të shërbimit të skanimit të sekreteve. Dy destinacionet ishin webhook[.]site/65a42464-3cfa-4b02-a18c-17a6d7b86f37 dhe webhook[.]site/4da03473-a3e7-4dc2-a087-9c564b4208e1.
Më 21 tetor, midis orës 10:08 dhe 11:08 a.m. UTC, sulmuesi anashkaloi branch protection, kontrollet e GitHub të krijuara për të kufizuar ndryshimet delikate të kodit, dhe ndryshoi release pipeline që të përdorte repository me emër të ngjashëm Berri-AI/litellm në vend të BerriAI/litellm. LiteLLM tha se publikimet normalisht duhej të inicioheshin nga një inxhinier i autorizuar dhe të miratoheshin nga një llogari e posaçme e lidhur me një pajisje fizike në zyrën e tij. Më herët gjatë asaj jave, rregulli ishte lehtësuar përkohësisht, në mënyrë që cilëtdo dy inxhinierë të mund të aktivizonin dhe miratonin publikimet. Sulmuesi përdori një OAuth token të vjedhur për të nisur publikimin dhe një tjetër për ta miratuar. Meqë OAuth token i një pronari të organizatës ishte komprometuar tashmë, LiteLLM tha se sulmuesi me gjasë mund ta kishte hequr plotësisht kufizimin, por mund ta ketë shmangur këtë për të zvogëluar mundësinë e zbulimit.
LiteLLM 1.107.0 u publikua në PyPI midis orës 11:39 dhe 11:40 a.m. UTC. Image për Docker Hub dhe GHCR pasuan në orën 11:46 a.m., ndërsa record e ekzekutimeve në production dhe staging u fshinë midis orës 11:53 dhe 11:54 a.m. Upwind raportoi supply-chain attack në orën 12:06 p.m. dhe PyPI e vendosi versionin e prekur në karantinë në orën 1:23 p.m. Timeline i LiteLLM thotë se tag e Docker Hub v1.107.0, latest, main-latest dhe main-stable u hoqën ose u ridrejtuan te image të verifikuara si të pastra në orën 2:20 p.m. UTC, megjithëse ai rresht jep datën 21 tetor 2025, ndryshe nga ngjarjet përreth që datojnë në vitin 2026.
Hetimet e shumta zbuluan se file keqdashës mund të ekzekutoheshin sa herë që nisej Python, edhe nëse një aplikacion nuk e importonte kurrë LiteLLM. Një component mblidhte kredenciale nga mjetet e zhvilluesve, shërbimet AI, mjediset cloud dhe web browser. Ai mblidhte gjithashtu hollësi të sistemit, file SSH, kredenciale Git dhe GitLab, environment variables dhe token të lidhur me npm, PyPI, pip, Yarn, Maven, Gradle, Composer, RubyGems dhe Cargo. Të dhënat e vjedhura kompresoheshin dhe dërgoheshin përmes një kërkese HTTP POST te litellm[.]dev/healthcheck, një domain i regjistruar më 13 tetor 2026.
Një component i dytë instalonte një backdoor të orientuar për Unix, domethënë një mënyrë të fshehtë për ekzekutimin e komandave nga larg, si background process. Ai kontaktonte çdo orë infrastrukturën e sulmuesit për të marrë dhe ekzekutuar kod arbitrar. Microsoft Security Research paralajmëroi se file keqdashës të nisjes së Python vendoseshin jashtë directory të aplikacionit LiteLLM, kështu që fshirja vetëm e aplikacionit mund t'i linte pas këta component.
LiteLLM tha se po revokonte token të lidhur me sistemet e tij të brendshme dhe platformat e furnitorëve. Hetimi i tij hodhi poshtë gjithashtu një teori të mëparshme se GitHub OAuth token ishin marrë nga log e brendshme të deployment. Për operatorët e faqeve web dhe ekipet IT, rasti tregon pse dependencies të software, llogaritë e build dhe kredencialet e ruajtura të shërbimeve duhet të merren të gjitha në konsideratë gjatë reagimit ndaj një pakete të komprometuar. Për organizatat që shqyrtojnë këtë ekspozim më të gjerë, AEU-I ofron shërbime IT, infrastrukturë dhe konsulencë me sigurinë si përparësi.