Chyba zabezpečení v cdnj, která umožnila spuštění kódu na serverech Cloudflare

V síti Cloudflare pro doručování obsahu cdnjs byla identifikována kritická zranitelnost, která je navržena tak, aby urychlila doručování knihoven JavaScriptu a umožnila spuštění libovolného kódu na serverech CDN. Nebezpečí problému je umocněno skutečností, že asi 12.7 % všech stránek na internetu využívá službu ke stažení knihoven JavaScriptu a kompromitace infrastruktury umožňuje nahradit knihovny poskytované některou z těchto stránek.

Služba cdnjs stahuje balíčky z Git nebo úložiště NPM, načež umožňuje libovolnému webu zdarma využívat síť pro doručování obsahu Cloudflare pro urychlení načítání knihoven JavaScriptu. Při studiu kódu komponent cdnjs publikovaných na GitHubu se ukázalo, že k rozbalení balíčků NPM v archivech tgz se používá standardní modul archive/tar v jazyce Go, který vytváří seznam souborů tak, jak je, bez normalizace cest. . V případě, že skript rozbalí obsah na základě daného seznamu, může přítomnost v archivu souborů jako „../../../../../../../tmp/test“ vést k přepsání libovolných souborů v systému, pokud to přístupová práva umožňují.

Bylo navrženo, aby útočník mohl požádat o přidání své knihovny do cdnjs a nahrát speciálně navržený archiv obsahující soubory se znaky „../“ v cestě do úložiště NPM. Na serverech cdnjs je periodicky prováděna operace "autoupdate", během které obsluha stahuje nové verze navrhované knihovny a rozbaluje obsah. Pomocí souborů s cestami „../“ může útočník přepsat soubory servisními skripty a spustit jejich kód na serveru, na kterém bylo rozbalení provedeno.

V případě stahování aktualizací z Gitu bylo zjištěno, že obsluha stahující aktualizace nebrala v úvahu symbolické odkazy při kopírování souborů z Gitu. Tato funkce umožnila organizovat čtení libovolných souborů ze serveru přidáním symbolických odkazů na Git.

Bylo rozhodnuto zahájit experimenty s demonstrací hackování cdnjs a získat cenu na HackerOne testováním hypotézy týkající se čtení souborů. Do repozitáře Git knihovny JavaScript obsluhované prostřednictvím CDN byl přidán symbolický odkaz test.js, který ukazuje na soubor /proc/self/maps. Po publikování nové verze knihovny obslužný program aktualizace zpracoval toto úložiště a publikoval zadaný soubor v cdnjs (test.js byl vytvořen jako symbolický odkaz a při požadavku na tento soubor byl vrácen obsah /proc/self/maps ).

Nahrazením symbolického odkazu na soubor /proc/self/environ si autor studie všiml, že uvedená data obsahují hodnoty proměnných prostředí GITHUB_REPO_API_KEY a WORKERS_KV_API_TOKEN. První proměnná uložila klíč API pro přístup k zápisu do úložiště robocdnjs na GitHubu. Druhá proměnná uložila token do úložiště KV v cdnjs. Pomocí obdržených informací by útočník mohl provést změny v cdnj a zcela ohrozit infrastrukturu.

Zdroj: opennet.ru

Přidat komentář