Ranljivost u cdnjs koja omogućava izvršavanje koda na Cloudflare serverima

U mreži za isporuku sadržaja cdnjs koju pruža tvrtka Cloudflare, namijenjenoj ubrzavanju isporuke JavaScript biblioteka, otkrivena je kritična ranjivost koja omogućuje izvršavanje proizvoljnog koda na CDN serverima. Opasnost ovog problema je dodatno pojačana jer otprilike 12,7% svih web stranica koristi ovu uslugu za učitavanje JavaScript biblioteka, a kompromitacija infrastrukture omogućuje zamjenu biblioteka koje se dostavljaju sa bilo koje od tih stranica.

Usluga cdnjs preuzima pakete iz Git-a ili NPM repozitorija, a zatim omogućuje bilo kojoj web stranici besplatno korištenje mreže za isporuku sadržaja Cloudflare za ubrzavanje učitavanja JavaScript biblioteka. Istraživanjem koda komponenti cdnjs objavljenog na GitHubu otkriveno je da se za raspakiravanje NPM paketa u tgz arhivima koristi standardni modul archive/tar napisan u Go, koji isporučuje popis datoteka kakav jest, bez normalizacije putanja. U slučaju kada skripta raspakira sadržaj na temelju izdanog popisa, prisutnost datoteka u arhivu poput „../../../../../tmp/test“ može dovesti do prepisivanja proizvoljnih datoteka u sustavu, ovisno o pravima pristupa.

Pretpostavljeno je da napadač može podnijeti zahtjev za dodavanje svoje biblioteke u cdnjs i učitati specijalno oblikovanu arhivu u NPM repozitorij koja sadrži datoteke sa simbolima „../“ u putu. Na serverima cdnjs povremeno se izvršava operacija „autoupdate“, tijekom koje obrada učitava nove verzije predložene biblioteke i raspakira sadržaj. Pomoću datoteka s putanjama „../“ napadač može postići prepisivanje datoteka sa skriptama usluge i izvršavanje svog koda na serveru na kojem je izvršavano raspakiravanje.

U slučaju učitavanja ažuriranja iz Git-a utvrđeno je da obrada koja preuzima ažuriranja nije uzimala u obzir simbolične veze prilikom kopiranja datoteka iz Git-a. Ova osobina omogućila je čitanje bilo kojih datoteka s poslužitelja dodavanjem simboličnih veza u Git.

Eksperimenti s demonstracijom hakiranja cdnjs za osvajanje nagrade na HackerOne odlučeno je započeti provjerom hipoteze o čitanju datoteka. U Git repozitorij umreženih putem CDN-a JavaScript biblioteke dodana je simbolička veza test.js koja upućuje na datoteku /proc/self/maps. Nakon objave nove verzije biblioteke, obrada ažuriranja obradila je ovaj repozitorij i objavila navedenu datoteku na cdnjs (test.js je stvoren kao simbolička veza i prilikom zahtjeva za ovom datotekom vraćao je sadržaj /proc/self/maps).

Zamjenom simboličke veze s datotekom /proc/self/environ autor istraživanja primijetio je da unutar predanih podataka postoje vrijednosti varijabli okruženja GITHUB_REPO_API_KEY i WORKERS_KV_API_TOKEN. U prvoj varijabli pohranjen je ključ za API za pristup s pravima pisanja u repozitorij robocdnjs na GitHubu. U drugoj varijabli pohranjen je token za KV skladište u cdnjs. Iskoristivši dobivene informacije, napadač je mogao izvršiti promjene u cdnjs i potpuno kompromitirati infrastrukturu.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster