Sårbarhed i cdnjs, der tillod kodekørsel på Cloudflare-servere

En kritisk sårbarhed er blevet identificeret i Cloudflares cdnjs-indholdsleveringsnetværk, som er designet til at fremskynde leveringen af ​​JavaScript-biblioteker, hvilket muliggør eksekvering af vilkårlig kode på CDN-servere. Faren ved problemet forværres af det faktum, at omkring 12.7 % af alle websteder på internettet bruger tjenesten til at downloade JavaScript-biblioteker, og kompromittering af infrastrukturen gør det muligt at erstatte de biblioteker, der leveres af nogen af ​​disse websteder.

cdnjs-tjenesten downloader pakker fra Git eller et NPM-lager, hvorefter det tillader ethvert websted at bruge Cloudflare-indholdsleveringsnetværket gratis for at fremskynde indlæsningen af ​​JavaScript-biblioteker. Da man studerede koden for cdnjs-komponenterne udgivet på GitHub, blev det afsløret, at for at udpakke NPM-pakker i tgz-arkiver, bruges standard archive/tar-modulet i Go-sproget, som producerer en liste over filer, som de er, uden at normalisere stierne . I det tilfælde, hvor scriptet pakker indholdet ud baseret på den givne liste, kan tilstedeværelsen i arkivet af filer som "../../../../../../../tmp/test" føre til overskrivning af vilkårlige filer i systemet, så vidt adgangsrettigheder tillader det.

Det blev foreslået, at en angriber kunne ansøge om at tilføje sit bibliotek til cdnjs og uploade et specielt designet arkiv indeholdende filer med "../"-tegn i stien til NPM-lageret. På cdnjs-servere udføres med jævne mellemrum en "autoupdate"-operation, hvor behandleren downloader nye versioner af det foreslåede bibliotek og pakker indholdet ud. Ved at bruge filer med stier "../", kan en hacker overskrive filer med servicescripts og udføre deres kode på den server, hvor udpakningen blev udført.

I tilfælde af at downloade opdateringer fra Git, blev det opdaget, at den behandler, der downloadede opdateringerne, ikke tog højde for symbolske links, når de kopierede filer fra Git. Denne funktion gjorde det muligt at organisere læsningen af ​​alle filer fra serveren ved at tilføje symbolske links til Git.

Det blev besluttet at starte eksperimenter med en demonstration af hacking cdnjs for at modtage en præmie hos HackerOne ved at teste hypotesen om fillæsning. Et symbolsk link test.js er blevet tilføjet til Git-lageret i JavaScript-biblioteket, der serveres via CDN, og peger på filen /proc/self/maps. Efter at have publiceret en ny version af biblioteket, behandlede opdateringshandleren dette lager og udgav den angivne fil i cdnjs (test.js blev oprettet som et symbolsk link, og når denne fil blev anmodet, blev indholdet af /proc/self/maps returneret ).

Ved at erstatte et symbolsk link til filen /proc/self/environ bemærkede forfatteren af ​​undersøgelsen, at de givne data indeholdt værdierne af miljøvariablerne GITHUB_REPO_API_KEY og WORKERS_KV_API_TOKEN. Den første variabel lagrede API-nøglen til skriveadgang til robocdnjs-lageret på GitHub. Den anden variabel gemte tokenet til KV-lageret i cdnjs. Ved at bruge de modtagne oplysninger kunne angriberen foretage ændringer i cdnjs og fuldstændigt kompromittere infrastrukturen.

Kilde: opennet.ru

Tilføj en kommentar