Ranjivost u cdnjs koja je omogućila izvršavanje koda na Cloudflare serverima

Kritična ranjivost je identifikovana u Cloudflareovoj cdnjs mreži za isporuku sadržaja, koja je dizajnirana da ubrza isporuku JavaScript biblioteka, omogućavajući proizvoljno izvršavanje koda na CDN serverima. Opasnost od problema se pogoršava činjenicom da oko 12.7% svih sajtova na Internetu koristi uslugu za preuzimanje JavaScript biblioteka, a kompromitovanje infrastrukture omogućava zamenu biblioteka koje obezbeđuju bilo koji od ovih sajtova.

Usluga cdnjs preuzima pakete iz Git-a ili NPM repozitorija, nakon čega dozvoljava bilo kojoj web stranici da besplatno koristi mrežu za isporuku sadržaja Cloudflare kako bi se ubrzalo učitavanje JavaScript biblioteka. Prilikom proučavanja koda cdnjs komponenti objavljenih na GitHub-u, otkriveno je da se za raspakivanje NPM paketa u tgz arhive koristi standardni arhivski/tar modul u Go jeziku, koji proizvodi listu datoteka kakva jeste, bez normalizacije putanja . U slučaju kada skripta raspakuje sadržaj na osnovu date liste, prisustvo u arhivi fajlova poput “../../../../../../../tmp/test” može dovesti do prepisivanja proizvoljnih fajlova u sistemu, koliko to dozvoljavaju prava pristupa.

Predloženo je da se napadač može prijaviti da doda svoju biblioteku u cdnjs i otpremi posebno dizajniranu arhivu koja sadrži datoteke sa znakovima “../” na putu do NPM spremišta. Na cdnjs serverima se periodično izvodi operacija "autoupdate", tokom koje rukovalac preuzima nove verzije predložene biblioteke i raspakuje sadržaj. Koristeći datoteke sa putanjama “../”, napadač može prepisati datoteke sa servisnim skriptama i izvršiti njihov kod na serveru na kojem je izvršeno raspakivanje.

U slučaju preuzimanja ažuriranja sa Gita, otkriveno je da rukovalac koji je preuzimao ažuriranja nije uzeo u obzir simboličke veze prilikom kopiranja datoteka sa Gita. Ova karakteristika je omogućila organizovanje čitanja bilo koje datoteke sa servera dodavanjem simboličkih veza u Git.

Odlučeno je započeti eksperimente sa demonstracijom hakovanja cdnjs-a za dobijanje nagrade na HackerOne-u testiranjem hipoteze o čitanju fajlova. Simbolička veza test.js dodata je u Git spremište JavaScript biblioteke koja se poslužuje preko CDN-a, ukazujući na datoteku /proc/self/maps. Nakon objavljivanja nove verzije biblioteke, obrađivač ažuriranja je obradio ovo spremište i objavio navedenu datoteku u cdnjs (test.js je kreiran kao simbolička veza i kada je ova datoteka zatražena, vraćen je sadržaj /proc/self/maps ).

Zamijenivši simboličku vezu na datoteku /proc/self/environ, autor studije je primijetio da dati podaci sadrže vrijednosti varijabli okruženja GITHUB_REPO_API_KEY i WORKERS_KV_API_TOKEN. Prva varijabla je pohranila API ključ za pristup pisanju u robocdnjs spremište na GitHubu. Druga varijabla je pohranila token u KV memoriju u cdnjs. Koristeći primljene informacije, napadač bi mogao unijeti promjene na cdnjs i potpuno kompromitirati infrastrukturu.

izvor: opennet.ru

Dodajte komentar