Kwetsberens yn cdnjs dy't koade útfiere op Cloudflare-tsjinners tastien

In krityske kwetsberens is identifisearre yn Cloudflare's cdnjs-ynhâldferlieningsnetwurk, dat is ûntworpen om de levering fan JavaScript-biblioteken te rapperjen, wêrtroch willekeurige koade útfiering op CDN-tsjinners mooglik makket. It gefaar fan it probleem wurdt fergrutte troch it feit dat sawat 12.7% fan alle siden op it ynternet de tsjinst brûke om JavaScript-biblioteken te downloaden, en kompromis fan 'e ynfrastruktuer makket it mooglik om de biblioteken te ferfangen dy't troch ien fan dizze siden oanbean wurde.

De cdnjs-tsjinst downloadt pakketten fan Git as in NPM-repository, wêrnei't it elke side mooglik makket it Cloudflare-ynhâldferlieningsnetwurk fergees te brûken om it laden fan JavaScript-biblioteken te rapperjen. By it bestudearjen fan 'e koade fan' e cdnjs-komponinten publisearre op GitHub, waard iepenbiere dat om NPM-pakketten yn tgz-argiven út te pakken, de standert argyf / tar-module yn 'e Go-taal wurdt brûkt, dy't in list mei bestannen produseart lykas is, sûnder de paden te normalisearjen . Yn it gefal as it skript de ynhâld útpakt op basis fan de opjûne list, kin de oanwêzigens yn it argyf fan bestannen lykas "../../../../../../../tmp/test" liede ta it oerskriuwen fan willekeurige triemmen yn systeem, sa fier as tagongsrjochten tastean.

It waard suggerearre dat in oanfaller oanfreegje koe om syn bibleteek ta te foegjen oan cdnjs en in spesjaal ûntwurpen argyf uploade mei bestannen mei "../"-tekens yn it paad nei it NPM-repository. Op cdnjs-tsjinners wurdt periodyk in "autoupdate"-operaasje útfierd, wêrby't de handler nije ferzjes fan 'e foarstelde bibleteek ynlade en de ynhâld útpakke. Mei help fan bestannen mei paden "../", kin in oanfaller bestannen oerskriuwe mei tsjinstskripts en har koade útfiere op de tsjinner wêrop it útpakke is útfierd.

Yn it gefal fan it downloaden fan updates fan Git, waard ûntdutsen dat de handler dy't de updates downloade hat gjin rekken hâlden mei symboalyske keppelings by it kopiearjen fan bestannen fan Git. Dizze funksje makke it mooglik om it lêzen fan alle bestannen fan 'e server te organisearjen troch symboalyske keppelings ta te foegjen oan Git.

It waard besletten om eksperiminten te begjinnen mei in demonstraasje fan hacking cdnjs om in priis te ûntfangen by HackerOne troch de hypoteze te testen oangeande triemlêzen. In symboalyske keppeling test.js is tafoege oan it Git-repository fan 'e JavaScript-bibleteek tsjinne fia CDN, ferwizend nei it /proc/self/maps-bestân. Nei it publisearjen fan in nije ferzje fan 'e bibleteek, ferwurke de fernijingshanneler dit repository en publisearre de opjûne triem yn cdnjs (test.js waard makke as in symboalyske keppeling en doe't dit bestân oanfrege waard, waard de ynhâld fan /proc/self/maps weromjûn ).

Troch in symboalyske keppeling te ferfangen nei it bestân /proc/self/environ, merkte de skriuwer fan 'e stúdzje op dat de opjûne gegevens de wearden befette fan' e omjouwingsfariabelen GITHUB_REPO_API_KEY en WORKERS_KV_API_TOKEN. De earste fariabele bewarre de API-kaai foar skriuwtagong ta it robocdnjs-repository op GitHub. De twadde fariabele bewarre de token nei de KV-opslach yn cdnjs. Mei help fan de ûntfongen ynformaasje koe de oanfaller wizigingen oan cdnjs meitsje en de ynfrastruktuer folslein kompromittearje.

Boarne: opennet.ru

Add a comment