Cdnjs ievainojamība, kas ļāva izpildīt kodu Cloudflare serveros

Ir konstatēta kritiska ievainojamība Cloudflare cdnjs satura piegādes tīklā, kas paredzēts JavaScript bibliotēku piegādes paātrināšanai, ļaujot CDN serveros veikt patvaļīgu kodu izpildi. Problēmas bīstamību pastiprina fakts, ka aptuveni 12.7% no visām vietnēm internetā izmanto pakalpojumu JavaScript bibliotēku lejupielādei, un infrastruktūras kompromitēšana ļauj aizstāt jebkuras no šīm vietnēm nodrošinātās bibliotēkas.

Pakalpojums cdnjs lejupielādē pakotnes no Git vai NPM repozitorija, pēc tam ļauj jebkurai vietnei bez maksas izmantot Cloudflare satura piegādes tīklu, lai paātrinātu JavaScript bibliotēku ielādi. Pētot GitHub publicēto cdnjs komponentu kodu, atklājās, ka NPM pakotņu izpakošanai tgz arhīvos tiek izmantots standarta arhīva/tar modulis Go valodā, kas izveido failu sarakstu tādu, kāds tas ir, bez ceļa normalizācijas. Gadījumā, ja skripts izpako saturu, pamatojoties uz doto sarakstu, arhīvā var būt tādi faili kā “../../../../../../../tmp/test”. noved pie patvaļīgu failu pārrakstīšanas sistēmā, ciktāl to atļauj piekļuves tiesības.

Tika ierosināts, ka uzbrucējs varētu pieteikties, lai pievienotu savu bibliotēku cdnjs un ceļā uz NPM repozitoriju augšupielādētu īpaši izstrādātu arhīvu, kurā ir faili ar rakstzīmēm “../”. Uz cdnjs serveriem periodiski tiek veikta "automātiskās atjaunināšanas" darbība, kuras laikā apdarinātājs lejupielādē jaunas piedāvātās bibliotēkas versijas un izpako saturu. Izmantojot failus ar ceļiem “../”, uzbrucējs var pārrakstīt failus ar pakalpojumu skriptiem un izpildīt to kodu serverī, kurā tika veikta izpakošana.

Gadījumā, ja tika lejupielādēti atjauninājumi no Git, tika atklāts, ka apstrādātājs, kas lejupielādē atjauninājumus, neņēma vērā simboliskās saites, kopējot failus no Git. Šī funkcija ļāva organizēt jebkuru failu lasīšanu no servera, pievienojot Git simbolikas saites.

Tika nolemts sākt eksperimentus ar uzlaušanas cdnjs demonstrāciju, lai saņemtu balvu HackerOne, pārbaudot hipotēzi par failu lasīšanu. Simboliskā saite test.js ir pievienota JavaScript bibliotēkas Git repozitorijai, kas tiek apkalpota, izmantojot CDN, norādot uz failu /proc/self/maps. Pēc jaunas bibliotēkas versijas publicēšanas atjauninājumu apstrādātājs apstrādāja šo repozitoriju un publicēja norādīto failu cdnjs (test.js tika izveidots kā simboliska saite un, kad šis fails tika pieprasīts, tika atgriezts /proc/self/maps saturs ).

Aizvietojot simbolisku saiti uz failu /proc/self/environ, pētījuma autors pamanīja, ka dotajos datos ir ietvertas vides mainīgo GITHUB_REPO_API_KEY un WORKERS_KV_API_TOKEN vērtības. Pirmais mainīgais saglabāja API atslēgu rakstīšanas piekļuvei robocdnjs repozitorijai vietnē GitHub. Otrais mainīgais saglabāja marķieri KV krātuvē cdnjs. Izmantojot saņemto informāciju, uzbrucējs varētu veikt izmaiņas cdnjs un pilnībā kompromitēt infrastruktūru.

Avots: opennet.ru

Pievieno komentāru