Sårbarhed i cdnjs, der gjorde det muligt at udføre kode på Cloudflare-servere.

I det netværk af indholdlevering, som Cloudflare tilbyder gennem cdnjs, der er designet til at fremskynde levering af JavaScript-biblioteker, er der blevet fundet en kritisk sårbarhed, der muliggør udførelse af vilkårlig kode på CDN-servere. Problemet forværres af det faktum, at omkring 12,7% af alle hjemmesider på internettet bruger tjenesten til at indlæse JavaScript-biblioteker, og en kompromittering af infrastrukturen muliggør, at bibliotekerne, der leveres af disse hjemmesider, kan blive ændret.

Tjenesten cdnjs indlæser pakker fra Git eller NPM-arkivet, hvorefter den giver enhver hjemmeside mulighed for gratis at udnytte Cloudflares indholdleveringsnetværk for at fremskynde indlæsningen af JavaScript-biblioteker. Under studiet af koden for cdnjs-komponenter, der er offentliggjort på GitHub, blev det konstateret, at den standard Go-modul archive/tar, der bruges til at udpakkede NPM-pakker fra tgz-arkiver, leverer listen over filer som de er, uden normalisering af stier. I tilfælde af at skriptet udpakkes baseret på den udleverede liste, kan tilstedeværelsen af filer i arkivet som „.. /.. /.. /.. /.. /.. /.. /tmp /test“ føre til overskrivning af vilkårlige filer i systemet, i det omfang adgangsrettighederne tillader det.

Det blev antaget, at en angriber kunne anmode om at tilføje sit bibliotek til cdnjs og uploade et specielt udformet arkiv til NPM-repositoryet, der indeholder filer med tegnene „.. /“ i stien. På serverne cdnjs udføres der periodisk en operation kaldet „autoupdate“, hvor en handler downloader nye versioner af det foreslåede bibliotek og udpakkes indholdet. Ved hjælp af filer med stierne „.. /“ kan angriberen opnå overskrivning af service-scriptfilerne og udføre sin kode på serveren den, hvor udpakkingen fandt sted.

I tilfælde af opdateringer fra Git blev det påvist, at den handler, der indlæser opdateringer, ikke tog højde for symbolske links, når filer blev kopieret fra Git. Denne funktionalitet gjorde det muligt at læse vilkårlige filer med server ved at tilføje symbolske links til Git.

Eksperimenter med at demonstrere angreb på cdnjs for at opnå belønning på HackerOne blev besluttet at starte med at teste hypotesen om læsning af filer. Der blev tilføjet et symbolsk link test.js til Git-repositoriet for den JavaScript-bibliotek, der blev leveret via CDN, som pegede på filen /proc/self/maps. Efter offentliggørelsen af en ny version af biblioteket behandlede opdateringshandleren dette repository og offentliggjorde den angivne fil i cdnjs (test.js blev oprettet som et symbolsk link, og ved anmodning om denne fil blev indholdet af /proc/self/maps vist).

Ved at sætte et symbolsk link til filen /proc/self/environ bemærkede forskeren, at der indeni de returnerede data var værdierne for miljøvariablerne GITHUB_REPO_API_KEY og WORKERS_KV_API_TOKEN. Den første variabel indeholdt en API-nøgle til skriverettigheder i repositoryet robocdnjs på GitHub. I den anden variabel var der en token til KV-lageret i cdnjs. Ved at udnytte de opnåede oplysninger kunne angriberen foretage ændringer i cdnjs og fuldstændig kompromittere infrastrukturen.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster