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

Në rrjetin e shpërndarjes së përmbajtjes cdnjs, të ofruar nga Cloudflare për përshpejtimin e shpërndarjes së bibliotekave JavaScript, është zbuluar një dobësi kritike që lejon ekzekutimin e kodeve të rastësishme në serverat 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ë ngarkuar bibliotekat JavaScript, dhe komprometimi i infrastrukturës lejon zëvendësimin e bibliotekave që ofrohen nga cilido nga këto faqe.

Shërbimi cdnjs ngarkon paketa nga Git ose repositorin NPM, pas së cilës i jep mundësinë çdo faqeje që të përdorë falas rrjetin e shpërndarjes së përmbajtjes Cloudflare për të përshpejtuar ngarkimin e bibliotekave JavaScript. Gjatë shqyrtimit të kodit të komponentëve cdnjs, të publikuar në GitHub, u zbulua se për nxjerrjen e paketimeve NPM nga arkivat tgz përdoret moduli standard archive/tar në gjuhën Go, i cili jep listën e skedarëve ashtu si janë, pa normalizimin e rrugëve. Në rastin kur skripti nxjerr përmbajtjen në bazë të listës së dhënë, prania e skedarëve si «../../../tmp/test» në arkiv mund të çojë në rikopjimin e skedarëve të rastësishëm në sistem, sa i lejojnë të drejtat e aksesit.

U supozua se një sulmues mund të aplikojë për shtimin e bibliotekës së tij në cdnjs dhe të ngarkojë në repositorin NPM një arkiv të formatuar posaçërisht që përmban skedarë me simbole «../» në rrugë. Në serverat cdnjs, operacioni «autoupdate» ekzekutohet periodikisht, gjatë të cilit, procesori ngarkon versione të reja të bibliotekës së propozuar dhe nxjerr përmbajtjen. Me ndihmën e skedarëve me rrugë «../», sulmuesi mund të arrijë në rikopjimin e skedarëve me skriptat e shërbimit dhe ekzekutimin e kodit të tij në server në të cilin po kryhej nxjerrja.

Në rastin e ngarkimit të përditësimeve nga Git, u zbulua se procesori i ngarkimit të përditësimeve nuk merrte parasysh lidhjet simbolike gjatë kopjimit të skedarëve nga Git. Kjo veçori lejonte organizimin e leximit të çdo skedari me serverë përmes shtimit të lidhjeve simbolike në Git.

Eksperimentet me demonstrimin e shkeljes së cdnjs për të fituar një shpërblim në HackerOne vendosi të fillojë me verifikimin e hipotezës në lidhje me leximin e skedave. Në Git-repositorin e bibliotekës JavaScript të shpërndarë përmes CDN, u shtua një lidhje simbolike test.js, e cila tregonte në skedarin /proc/self/maps. Pas publikimit të një versioni të ri të bibliotekës, përpunuesi i rinovimeve trajtoi këtë repo dhe publikoi skedarin e caktuar në cdnjs (test.js u krijua si lidhje simbolike dhe kur u kërkua ky skedar, u jepeshin përmbajtjet e /proc/self/maps).

Duke zëvendësuar lidhjen simbolike në skedarin /proc/self/environ, autori i studimit vuri re se brenda të dhënave të dërguara ishin vlerat e variablave të ambientit GITHUB_REPO_API_KEY dhe WORKERS_KV_API_TOKEN. Në variablin e parë ishte ruajtur çelësi për API për qasje me të drejta shkruese në repoin robocdnjs në GitHub. Në variablin e dytë ishte ruajtur tokeni për magazinën KV në cdnjs. Duke shfrytëzuar informacionet e marra, sulmuesi mund të bënte ndryshime në cdnjs dhe ta komprometonte plotësisht infrastrukturën.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster