AI

Obsidian Security: lanac propusta u LiteLLM-u mogao bi omogućiti preuzimanje AI gateway poslužitelja

00:41, 16.06.2026.
Obsidian Security: lanac propusta u LiteLLM-u mogao bi omogućiti preuzimanje AI gateway poslužitelja

Foto: Wikimedia Commons / DHSgov, Public domain

Istraživači iz Obsidian Securityja objavili su da zadani korisnik s niskim ovlastima na LiteLLM proxyju može uz povezivanje triju sigurnosnih propusta doći do pune administratorske razine i pokrenuti kod na poslužitelju. LiteLLM je široko korišten otvoreni AI gateway koji preko jednog OpenAI-kompatibilnog sučelja posreduje zahtjeve prema više od 100 pružatelja modela.

Obsidian navodi da je cijeli lanac ocijenjen s CVSS 9,9, što spada u kritičnu razinu. Maintainer BerriAI uključio je potpuni skup zakrpa u LiteLLM v1.83.14-stable, a GitHub tu verziju navodi kao objavljenu 2. svibnja. Preporuka je nadogradnja na tu ili noviju inačicu kako bi se zatvorio lanac od tri CVE oznake.

Prva karika je CVE-2026-47101, autorizacijski zaobilazak. Kada obični korisnik, interno označen kao internal_user, generira virtualni API ključ, LiteLLM pohranjuje polje allowed_routes koje je korisnik poslao, bez provjere odgovara li to njegovoj ulozi. To polje bi trebalo suziti što ključ smije raditi, no proxy ga tretira i kao zamjensko dopuštenje, pa ne-admin može izraditi ključ s allowed_routes: ["/*"], što obuhvaća sve rute, uključujući i one namijenjene administratorima. Isti neprovjereni zapis pojavljuje se i na drugim endpointima za upravljanje ključevima.

S tim zaobilaženjem rute postaju dostupni i handleri iza njih. Jedan od njih vodi do CVE-2026-47102, eskalacije privilegija. Endpoint /user/update dopušta korisniku izmjenu vlastitog zapisa, ali ne ograničava koja polja smije mijenjati. Ako se pošalje self-update s user_role: "proxy_admin", promjena se prihvaća i sprema, čime se korisnik promiče u punog proxy administratora. VulnCheck je toj ranjivosti dodijelio ocjenu 8,7 prema CVSS 4.0, odnosno 8,8 prema CVSS 3.1. Obsidian navodi i da org_admin taj endpoint može pogoditi kroz legitiman, predviđen kodni put, bez ikakvog zaobilaženja, dok do njega zadani internal_user dolazi nakon CVE-2026-47101.

Treća karika je CVE-2026-40217, sandbox bijeg u Custom Code Guardrailu, koji kompajlira i pokreće Python kod koji je zadao administrator. Produkcijski endpointi taj su kod prosljeđivali kroz exec() bez filtriranja na razini izvornog koda. Kada exec() dobije globals rječnik bez __builtins__, Python tiho ubacuje puni builtins modul, što kodu daje __import__, open i eval. Običan payload koji poziva os.system bio je dovoljan za reverse shell. Poseban put na /guardrails/test_custom_code playground endpointu, koji je neovisno pronašao X41 D-Sec, zaobišao je regex deny-listu runtime bytecode preinakom, a oba su završila izvršavanjem koda na poslužitelju.

LiteLLM je na ključnom mjestu u prometu, pa je doseg napada širok. Potpuni lanac otvara master key, salt key koji dešifrira pohranjene vjerodajnice i URL baze podataka. Otvaraju se i svi konfigurirani provider ključevi za OpenAI, Anthropic, Gemini, Bedrock, Azure i druge. Ključevi u konfiguraciji ili varijablama okruženja su u običnom tekstu, dok su ključevi u bazi šifrirani, ali se mogu vratiti uz salt key. Sve što prolazi kroz gateway, uključujući promptove i odgovore, postaje čitljivo.

Obsidian navodi i da je na demonstraciji, kroz kompromitirani proxy, pokazao utjecaj na Claude Code. Tvrtka pritom kaže da to nije prompt injection: umjesto nagovaranja modela da se ponaša pogrešno, napadač koristi LiteLLM-ov ugrađeni callback mehanizam, ekstenziju koja se aktivira na svakom zahtjevu i ne prikazuje se u administratorskom sučelju. Callback zamijeni odgovor modela krivotvorenom tool-call naredbom i prepiše kontekst sigurnosne provjere tako da radnja izgleda odobrena. U demonstraciji programer upisuje jednu riječ, hello, a napadač pokreće reverse shell na programerovu računalu.

Odvojeno od tog lanca, LiteLLM administratoru proxy_admin namjerno daje i put za izvršavanje koda: MCP podrška omogućuje registraciju stdio MCP poslužitelja koje proxy pokreće kao lokalne podprocese. Obsidian to opisuje kao dizajnerski kompromis, a ne kao bug, te navodi da zakrpe to ne mijenjaju, pa je dolazak do administratorske razine praktično jednak dolasku do izvršavanja koda. Na verziji v1.88.0 istraživači su, prema objavi, reproducirali reverse shell i na taj način. Uz to, zasebna ranjivost u istoj stdio-MCP mehanici, CVE-2026-42271, omogućila je pokretanje podprocesa kroz LiteLLM-ove MCP preview endpointove, a navodi se i da je iskorištena u stvarnom svijetu te dodana u CISA-in KEV katalog ranije ovog mjeseca.

Obsidian ovaj slučaj opisuje kao objavljeni propust s funkcionalnom demonstracijom, a ne kao iskorištavanje za koje je potvrđeno da se dogodilo u stvarnom svijetu. LiteLLM je, uz to, ranije ove godine već imao nekoliko ozbiljnih incidenata: u ožujku je kompromitacija opskrbnog lanca backdoorom zahvatila dvije verzije na PyPI-u, a u travnju je kritični SQL injection, prema navodu, iskorišten unutar 36 sati od objave.