Zranitelnost v cdnjs umožňující vzdálené spuštění kódu na serverech Cloudflare.

V síti pro doručování obsahu cdnjs, kterou poskytuje společnost Cloudflare a která je určena ke zrychlení doručení knihoven JavaScript, byla zjištěna kritická zranitelnost, která umožňuje provádět libovolný kód na serverech CDN. Nebezpečí této situace je umocněno tím, že pro načítání knihoven JavaScript využívá službu přibližně 12,7 % všech webových stránek na internetu, a kompromitace infrastruktury umožňuje zaměnění knihoven, které jsou poskytovány jakoukoli z těchto stránek.

Služba cdnjs provádí načítání balíčků z Git nebo repozitáře NPM, po čemž dává možnost jakémukoli webu zdarma využívat síť doručování obsahu Cloudflare ke zrychlení načítání knihoven JavaScript. Při zkoumání kódu komponentů cdnjs, zveřejněných na GitHubu, bylo zjištěno, že pro rozbalování NPM balíčků v archivech tgz se používá standardní modul archive/tar napsaný v Go, který poskytuje seznam souborů tak, jak je, bez normalizace cest. V případě, že skript rozbalí obsah na základě poskytnutého seznamu, může přítomnost souborů v archivu jako „../../../tmp/test“ vést k přepsání libovolných souborů v systému, jak dovolují přístupová práva.

Bylo předpokládáno, že útočník může podat žádost o přidání své knihovny do cdnjs a nahrát do repozitáře NPM speciálně formátovaný archiv obsahující soubory se znaky „../“ v cestě. Na serverech cdnjs se periodicky provádí operace „autoupdate“, při které zpracovatel nahrává nové verze navrhované knihovny a rozbalí obsah. Pomocí souborů s cestami „../“ může útočník dosáhnout přepsání souborů se skripty služby a vykonání svého kódu na serveru na kterém probíhalo rozbalování.

Při načítání aktualizací z Git bylo zjištěno, že zpracovatel načítání aktualizací nezohledňoval symbolické odkazy při kopírování souborů z Git. Tato vlastnost umožnila organizovat čtení jakýchkoli souborů s serveru přidáním symbolických odkazů do Git.

Experimenty s demonstračním hackováním cdnjs za účelem získání odměny na HackerOne začaly ověřením hypotézy o čtení souborů. Do Git repozitáře poskytovaného prostřednictvím CDN JavaScript knihovny byla přidána symbolická linka test.js, která ukazovala na soubor /proc/self/maps. Po zveřejnění nové verze knihovny zpracoval aktualizační skript tento repozitář a zveřejnil daný soubor v cdnjs (test.js byla vytvořena jako symbolická linka a při požadavku na tento soubor byl vrácen obsah /proc/self/maps).

Vložením symbolické linky na soubor /proc/self/environ autor studie poznamenal, že uvnitř vrácených dat jsou hodnoty proměnných prostředí GITHUB_REPO_API_KEY a WORKERS_KV_API_TOKEN. V první proměnné se nacházel klíč k API pro přístup s oprávněním k zápisu do repozitáře robocdnjs na GitHubu. Ve druhé proměnné byl uložen token pro KV úložiště v cdnjs. Využitím těchto informací mohl útočník provést změny v cdnjs a zcela zkompromitovat infrastrukturu.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster