A cdnjs biztonsági rése, amely lehetővé tette a kód futtatását a Cloudflare szervereken

Kritikus sérülékenységet azonosítottak a Cloudflare cdnjs tartalomszolgáltató hálózatában, amelynek célja a JavaScript-könyvtárak kézbesítésének felgyorsítása, lehetővé téve tetszőleges kódfuttatást a CDN-kiszolgálókon. A probléma veszélyét súlyosbítja, hogy az interneten található összes oldal mintegy 12.7%-a JavaScript-könyvtárak letöltésére használja a szolgáltatást, és az infrastruktúra kompromittálása lehetővé teszi az ezen oldalak bármelyike ​​által biztosított könyvtárak cseréjét.

A cdnjs szolgáltatás csomagokat tölt le a Gitből vagy egy NPM-tárhelyről, majd bármely webhely számára lehetővé teszi a Cloudflare tartalomszolgáltató hálózat ingyenes használatát a JavaScript-könyvtárak betöltésének felgyorsítása érdekében. A GitHubon közzétett cdnjs komponensek kódjának tanulmányozása során kiderült, hogy a tgz archívumokban lévő NPM-csomagok kicsomagolásához a szokásos Go nyelvű archív/tar modult használják, amely a fájllistát úgy állítja elő, ahogy van, anélkül, hogy normalizálná az elérési utat. . Abban az esetben, ha a szkript az adott lista alapján kicsomagolja a tartalmat, előfordulhat, hogy az archívumban olyan fájlok jelennek meg, mint a „../../../../../../../tmp/test”. tetszőleges fájlok felülírásához vezet a rendszerben, amennyire a hozzáférési jogok engedik.

Azt javasolták, hogy a támadó kérelmet nyújtson be a könyvtárának hozzáadására a cdnjs-hez, és egy speciálisan kialakított archívumot töltsön fel, amely „../” karaktereket tartalmazó fájlokat tartalmaz az NPM-tárhely elérési útjában. A cdnjs szervereken időszakonként „automatikus frissítés” műveletet hajtanak végre, amelynek során a kezelő letölti a javasolt könyvtár új verzióit, és kicsomagolja a tartalmat. A „../” útvonalú fájlok használatával a támadó felülírhatja a fájlokat szolgáltatási szkriptekkel, és végrehajthatja a kódjukat azon a szerveren, amelyen a kicsomagolás történt.

A frissítések Gitről történő letöltése esetén kiderült, hogy a frissítéseket letöltő kezelő nem vette figyelembe a szimbolikus hivatkozásokat a fájlok Gitről való másolásakor. Ez a funkció lehetővé tette a kiszolgálón lévő fájlok olvasásának megszervezését a Githez való szimbolikus hivatkozások hozzáadásával.

Úgy döntöttek, hogy kísérleteket kezdenek a cdnjs feltörésének bemutatásával, hogy a fájlolvasással kapcsolatos hipotézis tesztelésével díjat nyerjenek a HackerOne-nál. A /proc/self/maps fájlra mutató szimbolikus link test.js került a CDN-n keresztül kiszolgált JavaScript-könyvtár Git-tárházába. A könyvtár új verziójának közzététele után a frissítéskezelő feldolgozta ezt a tárolót, és közzétette a megadott fájlt cdnjs-ben (a test.js szimbolikus hivatkozásként jött létre, és amikor ezt a fájlt kérték, a /proc/self/maps tartalma visszakerült ).

A /proc/self/environ fájl szimbolikus hivatkozását behelyettesítve a tanulmány készítője észrevette, hogy a megadott adatok a GITHUB_REPO_API_KEY és a WORKERS_KV_API_TOKEN környezeti változók értékeit tartalmazzák. Az első változó tárolta az API-kulcsot a GitHubon található robocdnjs-tárolóhoz való írási hozzáféréshez. A második változó a tokent a KV tárolóban tárolta cdnjs-ben. A kapott információk felhasználásával a támadó módosíthatja a cdnjs-t, és teljesen veszélyeztetheti az infrastruktúrát.

Forrás: opennet.ru

Hozzászólás