Cloudflare zerbitzarietan kodea exekutatzea ahalbidetzen zuen cdnjetan ahultasuna

Ahultasun kritiko bat identifikatu da Cloudflare-ren cdnjs edukiak bidaltzeko sarean, JavaScript liburutegien bidalketa bizkortzeko diseinatuta dagoena, CDN zerbitzarietan kode arbitrarioa exekutatzeko aukera emanez. Arazoaren arriskua areagotu egiten da Interneteko gune guztien % 12.7 inguruk zerbitzua JavaScript liburutegiak deskargatzeko erabiltzen duelako, eta azpiegituraren konpromezuak gune horietako edozeinek eskaintzen dituen liburutegiak ordezkatzeko aukera ematen du.

cdnjs zerbitzuak Git edo NPM biltegi batetik deskargatzen ditu paketeak, eta, ondoren, edozein guneri Cloudflare edukia bidaltzeko sarea doan erabiltzeko aukera ematen dio JavaScript liburutegien karga azkartzeko. GitHub-en argitaratutako cdnjs osagaien kodea aztertzean, agerian geratu zen tgz artxiboetan NPM paketeak deskonprimitzeko, Go hizkuntzan artxibo/tar modulu estandarra erabiltzen dela, fitxategien zerrenda dagoen moduan sortzen duena, bideak normalizatu gabe. . Scriptak emandako zerrendan oinarritutako edukiak deskonprimitzen dituenean, "../../../../../../../tmp/test" bezalako fitxategien presentzia izan daiteke. sisteman fitxategi arbitrarioak gainidaztea ekarriko du, sarbide-eskubideek ahalbidetzen duten heinean.

Erasotzaile batek bere liburutegia cdnjs-era gehitzeko eta NPM biltegirako bidean "../" karaktereak dituzten fitxategiak dituen artxibo berezia kargatzeko eskaera egin zezakeela iradoki zen. Cdnjs zerbitzarietan, "autoeguneratu" eragiketa bat egiten da aldian-aldian, eta horretan kudeatzaileak proposatutako liburutegiaren bertsio berriak deskargatzen ditu eta edukiak deskonprimitzen ditu. "../" bideak dituzten fitxategiak erabiliz, erasotzaileak zerbitzu-scriptekin fitxategiak gainidatzi ditzake eta haien kodea exekutatu desegitea egin den zerbitzarian.

Git-en eguneraketak deskargatzearen kasuan, eguneratzeak deskargatzen zituen kudeatzaileak ez zituela esteka sinbolikoak kontuan hartzen aurkitu zen Git-etik fitxategiak kopiatzerakoan. Ezaugarri honek zerbitzariko edozein fitxategiren irakurketa antolatzea ahalbidetu zuen Git-i esteka sinbolikoak gehituz.

HackerOne-n sari bat jasotzeko cdnjs hacking erakustaldi batekin esperimentuak hastea erabaki zen, fitxategien irakurketaren inguruko hipotesia probatuz. Test.js esteka sinboliko bat gehitu da CDN bidez zerbitzatzen den JavaScript liburutegiko Git biltegian, /proc/self/maps fitxategira seinalatzen duena. Liburutegiaren bertsio berri bat argitaratu ondoren, eguneratze-kudeatzaileak biltegi hau prozesatu eta zehaztutako fitxategia cdnjs-en argitaratu zuen (test.js esteka sinboliko gisa sortu zen eta fitxategi hau eskatu zenean, /proc/self/maps-en edukia itzuli zen. ).

/proc/self/environ fitxategiari esteka sinboliko bat ordezkatuz, ikerketaren egileak ohartu zen emandako datuek GITHUB_REPO_API_KEY eta WORKERS_KV_API_TOKEN ingurune-aldagaien balioak zeudela. Lehenengo aldagaiak API gakoa gorde zuen GitHub-eko robocdnjs biltegian idazteko sarbidea izateko. Bigarren aldagaiak tokena KV biltegian gorde zuen cdnjs-en. Jasotako informazioa erabiliz, erasotzaileak cdnjetan aldaketak egin ditzake eta azpiegitura guztiz arriskuan jarri.

Iturria: opennet.ru

Gehitu iruzkin berria