Ranjivost u cdnj-ovima koja je dopuštala izvršavanje koda na Cloudflare poslužiteljima

Prepoznata je kritična ranjivost u Cloudflareovoj cdnjs mreži za isporuku sadržaja, koja je dizajnirana da ubrza isporuku JavaScript biblioteka, dopuštajući izvršavanje proizvoljnog koda na CDN poslužiteljima. Opasnost problema pogoršava činjenica da oko 12.7% svih stranica na internetu koristi uslugu preuzimanja JavaScript biblioteka, a kompromitacija infrastrukture omogućuje zamjenu biblioteka koje nudi bilo koje od tih mjesta.

Usluga cdnjs preuzima pakete s Gita ili NPM repozitorija, nakon čega dopušta bilo kojoj stranici da besplatno koristi Cloudflare mrežu za dostavu sadržaja kako bi se ubrzalo učitavanje JavaScript biblioteka. Prilikom proučavanja koda komponenti cdnjs objavljenog na GitHubu, otkriveno je da se za raspakiranje NPM paketa u tgz arhive koristi standardni modul archive/tar u jeziku Go, koji proizvodi popis datoteka kakav jest, bez normalizacije staza . U slučaju kada skripta raspakira sadržaj na temelju danog popisa, prisutnost u arhivi datoteka poput “../../../../../../../tmp/test” može dovesti do prepisivanja proizvoljnih datoteka u sustavu, koliko to dopuštaju prava pristupa.

Predloženo je da se napadač može prijaviti za dodavanje svoje biblioteke na cdnjs i učitati posebno dizajniranu arhivu koja sadrži datoteke sa znakovima “../” na putu do NPM repozitorija. Na cdnjs poslužiteljima povremeno se izvodi operacija "autoupdate", tijekom koje rukovatelj preuzima nove verzije predložene biblioteke i raspakira sadržaj. Koristeći datoteke sa stazama “../”, napadač može prebrisati datoteke servisnim skriptama i izvršiti njihov kod na poslužitelju na kojem je izvršeno raspakiranje.

U slučaju preuzimanja ažuriranja s Gita, otkriveno je da rukovatelj koji preuzima ažuriranja nije uzeo u obzir simboličke veze prilikom kopiranja datoteka s Gita. Ova značajka omogućila je organiziranje čitanja bilo koje datoteke s poslužitelja dodavanjem simboličkih veza na Git.

Odlučeno je započeti eksperimente s demonstracijom hakiranja cdnj-ova kako bi dobili nagradu na HackerOneu testiranjem hipoteze o čitanju datoteka. Simbolička veza test.js dodana je u Git repozitorij JavaScript biblioteke koja se poslužuje putem CDN-a, pokazujući na datoteku /proc/self/maps. Nakon objavljivanja nove verzije biblioteke, rukovatelj ažuriranjem obradio je ovo spremište i objavio navedenu datoteku u cdnjs (test.js je stvoren kao simbolička veza i kada je ova datoteka zatražena, vraćen je sadržaj /proc/self/maps ).

Zamjenom simboličke veze na datoteku /proc/self/environ, autor studije primijetio je da navedeni podaci sadrže vrijednosti varijabli okruženja GITHUB_REPO_API_KEY i WORKERS_KV_API_TOKEN. Prva varijabla pohranila je API ključ za pristup pisanju u repozitorij robocdnjs na GitHubu. Druga varijabla pohranila je token u KV pohranu u cdnjs. Koristeći dobivene informacije, napadač bi mogao napraviti promjene na cdnj-ovima i potpuno ugroziti infrastrukturu.

Izvor: opennet.ru

Dodajte komentar