SÀkerhetsbrist i cdnjs som gjorde det möjligt att köra kod pÄ Cloudflares servrar

I det av Cloudflare tillhandahÄllna innehÄllsnÀtverket cdnjs, avsett för att snabba upp leveransen av JavaScript-bibliotek, har en kritisk sÄrbarhet identifierats som möjliggör körning av godtycklig kod pÄ CDN-servrar. Problemet förvÀrras av det faktum att omkring 12,7 % av alla webbplatser pÄ internet anvÀnder tjÀnsten för att ladda ner JavaScript-bibliotek, och en kompromettering av infrastrukturen kan leda till att biblioteken som tillhandahÄlls av dessa webbplatser byts ut.

TjÀnsten cdnjs laddar ner paket frÄn Git eller NPM-repositoriet, och ger dÀrmed alla webbplatser möjlighet att kostnadsfritt anvÀnda Cloudflares innehÄllsnÀtverk för att snabba upp laddningen av JavaScript-bibliotek. Vid granskningen av koden för cdnjs-komponenterna, publicerade pÄ GitHub, upptÀcktes det att en standardmodul archive/tar pÄ Go-sprÄket anvÀnds för att extrahera NPM-paket frÄn tgz-arkiv, vilket ger en lista över filer som de Àr, utan normalisering av sökvÀgar. Om ett skript extraherar innehÄllet baserat pÄ den givna listan kan förekomsten av filer av typen "..\/..\/..\/..\/..\/..\/..\/tmp\/test" i arkivet leda till att godtyckliga filer skrivs över i systemet, i den utstrÀckning som behörigheterna medger.

Det antogs att en angripare kan ansöka om att fÄ lÀgga till sitt bibliotek i cdnjs och ladda upp ett sÀrskilt utformat arkiv till NPM-repositoriet, innehÄllande filer med tecken "..\/" i sökvÀgen. PÄ cdnjs-servrarna utförs periodiskt en ÄtgÀrd "autoupdate", dÀr en handler laddar ner nya versioner av det föreslagna biblioteket och extraherar innehÄllet. Genom att anvÀnda filer med sökvÀgar som "..\/" kan den angripande uppnÄ att skriva över filer med tjÀnstens skript och köra sin kod pÄ servern som utfördes för extraheringen.

Vid nedladdning av uppdateringar frÄn Git visade det sig att den nedladdande uppdateringshandlaren inte beaktade symboliska lÀnkar vid kopiering av filer frÄn Git. Denna egenskap möjliggjorde lÀsning av alla filer med servern genom att lÀgga till symboliska lÀnkar i Git.

Experimenten med att demonstrera ett hack av cdnjs för att fÄ en belöning pÄ HackerOne började med att testa hypotesen om filavlÀsning. En symbolisk lÀnk test.js lades till i Git-repo för den JavaScript-bibliotek som distribuerades via CDN, vilket pekade pÄ filen /proc/self/maps. Efter publiceringen av den nya versionen av biblioteket hanterade uppdateringshanteraren detta repository och publicerade den angivna filen i cdnjs (test.js skapades som en symbolisk lÀnk och vid begÀran om denna fil visades innehÄllet frÄn /proc/self/maps).

Genom att sÀtta en symbolisk lÀnk till filen /proc/self/environ noterade forskaren att de returnerade data innehöll vÀrdena för miljövariablerna GITHUB_REPO_API_KEY och WORKERS_KV_API_TOKEN. Den första variabeln innehöll API-nyckeln för skrivÄtkomst till repositoryn robocdnjs pÄ GitHub. Den andra variabeln innehöll en token för KV-lagring i cdnjs. Med hjÀlp av dessa uppgifter kunde angriparen göra Àndringar i cdnjs och helt kompromettera infrastrukturen.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster