Cdnjs-i haavatavus, mis võimaldas Cloudflare'i serverites koodi käivitada

Cloudflare'i cdnjs-sisu edastamise võrgus on tuvastatud kriitiline haavatavus, mis on loodud JavaScripti teekide edastamise kiirendamiseks, võimaldades CDN-serverites suvalist koodi käivitamist. Probleemi ohtu suurendab asjaolu, et umbes 12.7% kõigist Internetis leiduvatest saitidest kasutab teenust JavaScripti teekide allalaadimiseks ning infrastruktuuri kahjustamine võimaldab asendada nende saitide pakutavaid teeke.

Teenus cdnjs laadib paketid alla Gitist või NPM-i hoidlast, misjärel võimaldab see igal saidil JavaScripti teekide laadimise kiirendamiseks tasuta kasutada Cloudflare'i sisuedastusvõrku. GitHubis avaldatud cdnjs komponentide koodi uurides selgus, et tgz arhiivides NPM-i pakettide lahtipakkimiseks kasutatakse Go-keeles standardset arhiivi/tar moodulit, mis koostab failide loendi sellisel kujul, ilma teed normaliseerimata. . Juhul, kui skript pakib sisu lahti antud loendi alusel, võib arhiivis esineda selliseid faile nagu “../../../../../../../tmp/test”. põhjustada suvaliste failide ülekirjutamist süsteemis, kuivõrd juurdepääsuõigused seda võimaldavad.

Pakuti, et ründaja võiks taotleda oma teegi lisamist cdnjs-i ja laadida NPM-i hoidlasse üles spetsiaalselt loodud arhiivi, mis sisaldab "../" märkidega faile. cdnjs-serverites tehakse perioodiliselt "automaatse värskendamise" toiming, mille käigus laadib töötleja pakutud teegi uued versioonid alla ja pakib sisu lahti. Kasutades faile teedega “../”, saab ründaja teenuseskriptidega failid üle kirjutada ja käivitada nende koodi serveris, kus lahtipakkimine toimus.

Gitist värskenduste allalaadimise puhul avastati, et värskendusi alla laadiv töötleja ei arvestanud Gitist failide kopeerimisel sümboolseid linke. See funktsioon võimaldas korraldada mis tahes failide lugemist serverist, lisades Giti sümboolsed lingid.

Otsustati alustada katseid cdnjs-i häkkimise demonstratsiooniga, et saada HackerOne'il auhind, testides failide lugemist puudutavat hüpoteesi. CDN-i kaudu pakutava JavaScripti teegi Giti hoidlasse on lisatud sümboolne link test.js, mis osutab failile /proc/self/maps. Pärast teegi uue versiooni avaldamist töötles värskenduste töötleja seda hoidlat ja avaldas määratud faili cdnjs-s (test.js loodi sümboolse lingina ja kui seda faili küsiti, tagastati faili /proc/self/maps sisu ).

Asendades sümboolse lingi failile /proc/self/environ, märkas uuringu autor, et antud andmed sisaldasid keskkonnamuutujate GITHUB_REPO_API_KEY ja WORKERS_KV_API_TOKEN väärtusi. Esimene muutuja salvestas API-võtme GitHubi robocdnjs-hoidlasse kirjutamise juurdepääsuks. Teine muutuja salvestas märgi KV salvestusruumi cdnjs-s. Saadud teavet kasutades võib ründaja teha cdnjs-s muudatusi ja kahjustada täielikult infrastruktuuri.

Allikas: opennet.ru

Lisa kommentaar