Sårbarhet i cdnjs som möjliggjorde kodexekvering på Cloudflare-servrar

En kritisk sårbarhet har identifierats i Cloudflares cdnjs-innehållsleveransnätverk, som är utformat för att påskynda leveransen av JavaScript-bibliotek, vilket möjliggör exekvering av godtycklig kod på CDN-servrar. Faran med problemet förvärras av det faktum att cirka 12.7 % av alla webbplatser på Internet använder tjänsten för att ladda ner JavaScript-bibliotek, och kompromiss med infrastrukturen gör det möjligt att ersätta de bibliotek som tillhandahålls av någon av dessa webbplatser.

Tjänsten cdnjs laddar ner paket från Git eller ett NPM-förråd, varefter den tillåter vilken webbplats som helst att använda Cloudflares innehållsleveransnätverk gratis för att påskynda laddningen av JavaScript-bibliotek. När man studerade koden för cdnjs-komponenterna publicerade på GitHub, avslöjades det att för att packa upp NPM-paket i tgz-arkiv, används standardarkivet/tar-modulen i Go-språket, som producerar en lista med filer som de är, utan att normalisera sökvägarna . I fallet när skriptet packar upp innehållet baserat på den givna listan, kan närvaron i arkivet av filer som "../../../../../../../tmp/test" leda till att godtyckliga filer skrivs över i systemet, så långt som åtkomsträttigheterna tillåter.

Det föreslogs att en angripare kunde ansöka om att lägga till sitt bibliotek till cdnjs och ladda upp ett specialdesignat arkiv som innehåller filer med "../"-tecken i sökvägen till NPM-förvaret. På cdnjs-servrar utförs regelbundet en "autoupdate"-operation, under vilken hanteraren laddar ner nya versioner av det föreslagna biblioteket och packar upp innehållet. Genom att använda filer med sökvägarna "../" kan en angripare skriva över filer med tjänsteskript och exekvera deras kod på servern där uppackningen utfördes.

När det gäller nedladdning av uppdateringar från Git upptäcktes det att hanteraren som laddade ner uppdateringarna inte tog hänsyn till symboliska länkar vid kopiering av filer från Git. Denna funktion gjorde det möjligt att organisera läsningen av alla filer från servern genom att lägga till symboliska länkar till Git.

Det beslutades att starta experiment med en demonstration av hackande cdnjs för att ta emot ett pris på HackerOne genom att testa hypotesen angående filläsning. En symbolisk länk test.js har lagts till i Git-förrådet i JavaScript-biblioteket som serveras via CDN, och pekar på filen /proc/self/maps. Efter att ha publicerat en ny version av biblioteket bearbetade uppdateringshanteraren detta arkiv och publicerade den angivna filen i cdnjs (test.js skapades som en symbolisk länk och när denna fil begärdes returnerades innehållet i /proc/self/maps ).

Genom att ersätta en symbolisk länk till filen /proc/self/environ, märkte författaren av studien att den givna informationen innehöll värdena för miljövariablerna GITHUB_REPO_API_KEY och WORKERS_KV_API_TOKEN. Den första variabeln lagrade API-nyckeln för skrivåtkomst till robocdnjs-förvaret på GitHub. Den andra variabeln lagrade token i KV-lagringen i cdnjs. Med hjälp av den mottagna informationen kan angriparen göra ändringar i cdnjs och fullständigt äventyra infrastrukturen.

Källa: opennet.ru

Lägg en kommentar