Dobësi në cdnjs që lejoi ekzekutimin e kodit në serverët Cloudflare

Një cenueshmëri kritike është identifikuar në rrjetin e ofrimit të përmbajtjes cdnjs të Cloudflare, i cili është krijuar për të përshpejtuar shpërndarjen e bibliotekave JavaScript, duke lejuar ekzekutimin arbitrar të kodit në serverët CDN. Rreziku i problemit përkeqësohet nga fakti se rreth 12.7% e të gjitha faqeve në internet përdorin shërbimin për të shkarkuar bibliotekat JavaScript dhe komprometimi i infrastrukturës bën të mundur zëvendësimin e bibliotekave të ofruara nga ndonjë prej këtyre sajteve.

Shërbimi cdnjs shkarkon paketa nga Git ose një depo NPM, pas së cilës lejon çdo sajt të përdorë falas rrjetin e shpërndarjes së përmbajtjes Cloudflare për të shpejtuar ngarkimin e bibliotekave JavaScript. Gjatë studimit të kodit të komponentëve cdnjs të publikuar në GitHub, u zbulua se për të shpaketuar paketat NPM në arkivat tgz, përdoret moduli standard i arkivit/tar në gjuhën Go, i cili prodhon një listë skedarësh siç është, pa normalizuar shtigjet. . Në rastin kur skripti shpaketon përmbajtjen bazuar në listën e dhënë, prania në arkivin e skedarëve si "../../../../../../../tmp/test" mund të çojnë në mbishkrimin e skedarëve arbitrar në sistem, për aq sa lejojnë të drejtat e aksesit.

U sugjerua që një sulmues mund të aplikonte për të shtuar bibliotekën e tij në cdnjs dhe të ngarkonte një arkiv të krijuar posaçërisht që përmban skedarë me karaktere "../" në rrugën drejt depove NPM. Në serverët cdnjs, një operacion "autoupdate" kryhet periodikisht, gjatë të cilit mbajtësi shkarkon versione të reja të bibliotekës së propozuar dhe shpaketon përmbajtjen. Duke përdorur skedarë me shtigje "../", një sulmues mund të mbishkruajë skedarët me skriptet e shërbimit dhe të ekzekutojë kodin e tyre në serverin në të cilin është kryer zbërthimi.

Në rastin e shkarkimit të përditësimeve nga Git, u zbulua se mbajtësi që shkarkonte përditësimet nuk mori parasysh lidhjet simbolike kur kopjonte skedarë nga Git. Kjo veçori bëri të mundur organizimin e leximit të çdo skedari nga serveri duke shtuar lidhje simbolike në Git.

U vendos që të fillojë eksperimentet me një demonstrim të hakerimit të cdnj-ve për të marrë një çmim në HackerOne duke testuar hipotezën në lidhje me leximin e skedarëve. Një lidhje simbolike test.js është shtuar në depo Git të bibliotekës JavaScript të shërbyer nëpërmjet CDN, duke treguar skedarin /proc/self/maps. Pas publikimit të një versioni të ri të bibliotekës, mbajtësi i përditësimit përpunoi këtë depo dhe publikoi skedarin e specifikuar në cdnjs (test.js u krijua si një lidhje simbolike dhe kur u kërkua ky skedar, përmbajtja e /proc/self/maps u kthye ).

Duke zëvendësuar një lidhje simbolike me skedarin /proc/self/environ, autori i studimit vuri re se të dhënat e dhëna përmbanin vlerat e variablave të mjedisit GITHUB_REPO_API_KEY dhe WORKERS_KV_API_TOKEN. Variabli i parë ruante çelësin API për hyrjen e shkrimit në depon e robocdnjs në GitHub. Variabla e dytë e ruante tokenin në hapësirën ruajtëse KV në cdnjs. Duke përdorur informacionin e marrë, sulmuesi mund të bëjë ndryshime në cdnj dhe të komprometojë plotësisht infrastrukturën.

Burimi: opennet.ru

Shto një koment