Ranljivost v cdnj-jih, ki je omogočala izvajanje kode na strežnikih Cloudflare

V omrežju za dostavo vsebin cdnjs Cloudflare je bila ugotovljena kritična ranljivost, ki je zasnovana za pospešitev dostave knjižnic JavaScript, kar omogoča izvajanje poljubne kode na strežnikih CDN. Nevarnost težave je še večja zaradi dejstva, da približno 12.7 % vseh spletnih mest na internetu uporablja storitev za prenos knjižnic JavaScript, ogroženost infrastrukture pa omogoča zamenjavo knjižnic, ki jih ponuja katero koli od teh mest.

Storitev cdnjs prenese pakete iz Git ali repozitorija NPM, nato pa kateremu koli mestu omogoči brezplačno uporabo omrežja za dostavo vsebine Cloudflare, da pospeši nalaganje knjižnic JavaScript. Pri proučevanju kode komponent cdnjs, objavljene na GitHubu, je bilo ugotovljeno, da se za razpakiranje paketov NPM v arhivih tgz uporablja standardni modul archive/tar v jeziku Go, ki ustvari seznam datotek, kakršen je, brez normalizacije poti . V primeru, ko skript razpakira vsebino na podlagi podanega seznama, lahko prisotnost v arhivu datotek, kot je »../../../../../../../tmp/test« vodi do prepisovanja poljubnih datotek v sistemu, kolikor dovoljujejo pravice dostopa.

Predlagano je bilo, da bi lahko napadalec zaprosil za dodajanje svoje knjižnice v cdnjs in naložil posebej oblikovan arhiv, ki vsebuje datoteke z znaki »../« na poti do repozitorija NPM. Na strežnikih cdnjs se občasno izvaja operacija "samodejnega posodabljanja", med katero upravljavec prenese nove različice predlagane knjižnice in razpakira vsebino. Z uporabo datotek s potmi “../” lahko napadalec prepiše datoteke s servisnimi skripti in izvede njihovo kodo na strežniku, na katerem je bilo izvedeno razpakiranje.

V primeru prenosa posodobitev iz Gita je bilo ugotovljeno, da upravljavec, ki prenaša posodobitve, pri kopiranju datotek iz Gita ni upošteval simbolnih povezav. Ta funkcija je omogočila organizacijo branja poljubnih datotek s strežnika z dodajanjem simboličnih povezav v Git.

Odločeno je bilo, da se poskusi začnejo z demonstracijo hekanja cdnjs, da bi prejeli nagrado na HackerOne s testiranjem hipoteze o branju datoteke. Simbolna povezava test.js je bila dodana v repozitorij Git knjižnice JavaScript, ki se streže prek CDN, in kaže na datoteko /proc/self/maps. Po objavi nove različice knjižnice je upravljavec posodobitev obdelal to skladišče in objavil določeno datoteko v cdnjs (test.js je bil ustvarjen kot simbolna povezava in ko je bila ta datoteka zahtevana, je bila vrnjena vsebina /proc/self/maps ).

Z zamenjavo simbolične povezave do datoteke /proc/self/environ je avtor študije opazil, da navedeni podatki vsebujejo vrednosti spremenljivk okolja GITHUB_REPO_API_KEY in WORKERS_KV_API_TOKEN. Prva spremenljivka je shranila ključ API za dostop do pisanja v repozitorij robocdnjs na GitHubu. Druga spremenljivka je shranila žeton v shrambo KV v cdnjs. Z uporabo prejetih informacij lahko napadalec spremeni cdnjs in popolnoma ogrozi infrastrukturo.

Vir: opennet.ru

Dodaj komentar