cdnjs pažeidžiamumas, leidžiantis vykdyti kodą „Cloudflare“ serveriuose

„Cloudflare“ cdnjs turinio pristatymo tinkle, kuris skirtas pagreitinti „JavaScript“ bibliotekų pristatymą, buvo nustatytas kritinis pažeidžiamumas, leidžiantis savavališkai vykdyti kodą CDN serveriuose. Problemos pavojų didina tai, kad apie 12.7% visų interneto svetainių naudojasi paslauga JavaScript bibliotekoms atsisiųsti, o infrastruktūros sukompromitavimas leidžia pakeisti bet kurios iš šių svetainių teikiamas bibliotekas.

„Cdnjs“ paslauga atsisiunčia paketus iš „Git“ arba NPM saugyklos, o po to bet kuriai svetainei leidžia nemokamai naudotis „Cloudflare“ turinio pristatymo tinklu, kad būtų paspartintas „JavaScript“ bibliotekų įkėlimas. Tiriant GitHub paskelbtą cdnjs komponentų kodą, paaiškėjo, kad NPM paketams išpakuoti tgz archyvuose naudojamas standartinis archyvo/tar modulis Go kalba, kuris sukuria failų sąrašą tokį, koks yra, be kelio normalizavimo. Tuo atveju, kai scenarijus išpakuoja turinį pagal pateiktą sąrašą, archyve gali būti tokių failų kaip „../../../../../../../tmp/test“. gali perrašyti savavališkus failus sistemoje, kiek leidžia prieigos teisės.

Buvo pasiūlyta, kad užpuolikas galėtų pateikti prašymą įtraukti savo biblioteką prie cdnjs ir įkelti specialiai sukurtą archyvą, kuriame yra failai su „../“ simboliais, esančiais kelyje į NPM saugyklą. cdnjs serveriuose periodiškai atliekama „automatinio atnaujinimo“ operacija, kurios metu tvarkytojas atsisiunčia naujas siūlomos bibliotekos versijas ir išpakuoja turinį. Naudodamas failus su keliais „../“, užpuolikas gali perrašyti failus su paslaugų scenarijais ir vykdyti jų kodą serveryje, kuriame buvo atliktas išpakavimas.

Atsisiunčiant naujinimus iš „Git“, buvo nustatyta, kad naujinimus atsisiunčiantis tvarkytojas, kopijuodamas failus iš „Git“, neatsižvelgė į simbolines nuorodas. Ši funkcija leido organizuoti bet kokių failų skaitymą iš serverio pridedant simbolines nuorodas į Git.

Buvo nuspręsta pradėti eksperimentus su įsilaužimo cdnjs demonstravimu, kad gautumėte prizą HackerOne, patikrinus hipotezę dėl failų skaitymo. Simbolinė nuoroda test.js buvo įtraukta į „JavaScript“ bibliotekos „Git“ saugyklą, teikiamą per CDN, nurodanti failą /proc/self/maps. Paskelbus naują bibliotekos versiją, naujinimų tvarkytojas apdorojo šią saugyklą ir paskelbė nurodytą failą cdnjs (test.js buvo sukurta kaip simbolinė nuoroda ir paprašius šio failo buvo grąžintas /proc/self/maps turinys ).

Pakeitęs simbolinę nuorodą į failą /proc/self/environ, tyrimo autorius pastebėjo, kad pateiktuose duomenyse yra aplinkos kintamųjų GITHUB_REPO_API_KEY ir WORKERS_KV_API_TOKEN reikšmės. Pirmasis kintamasis saugojo API raktą, leidžiantį rašyti prie „robocdnjs“ saugyklos „GitHub“. Antrasis kintamasis išsaugojo prieigos raktą KV saugykloje cdnjs. Naudodamasis gauta informacija, užpuolikas gali pakeisti cdnjs ir visiškai pažeisti infrastruktūrą.

Šaltinis: opennet.ru

Добавить комментарий