Kwetsbaarheid in cdnjs, waardoor code op de Cloudflare servers kan worden uitgevoerd

In het door Cloudflare aangeboden content delivery network cdnjs, bedoeld om de levering van JavaScript-bibliotheken te versnellen, is een kritieke kwetsbaarheid ontdekt die het mogelijk maakt om willekeurige code uit te voeren op de CDN-servers. Het gevaar van deze situatie wordt vergroot door het feit dat ongeveer 12,7% van alle websites op het internet gebruikmaakt van deze service voor het laden van JavaScript-bibliotheken, en de compromis van deze infrastructuur stelt kwaadwillenden in staat om de bibliotheken te vervangen die aan een van deze websites worden aangeboden.

De cdnjs-service laadt pakketten uit Git of de NPM-repository en biedt vervolgens elke website de mogelijkheid om gratis gebruik te maken van het Cloudflare content delivery network om de laadtijd van JavaScript-bibliotheken te versnellen. Bij het bestuderen van de code van de cdnjs-componenten die op GitHub zijn gepubliceerd, werd ontdekt dat de standaard archive/tar-module in Go wordt gebruikt om NPM-pakketten in tgz-archieven uit te pakken, en deze geeft de lijst van bestanden weer zoals zij zijn, zonder padnormalisatie. Wanneer het script de inhoud uitpakt op basis van de gegeven lijst, kan de aanwezigheid van bestanden in het archief zoals "..\/..\/..\/..\/..\/..\/..\/tmp\/test" leiden tot het overschrijven van willekeurige bestanden in het systeem, afhankelijk van de toegangsrechten.

Er werd gesuggereerd dat een aanvaller een verzoek kan indienen om zijn bibliotheek aan cdnjs toe te voegen en een speciaal opgemaakte archief in de NPM-repository kan uploaden die bestanden met het symbool "..\/" in het pad bevat. Op de cdnjs-servers wordt periodiek de "autoupdate"-operatie uitgevoerd, waarbij de handler nieuwe versies van de voorgestelde bibliotheek downloadt en de inhoud uitpakt. Met behulp van bestanden met paden zoals "..\/" kan de aanvaller het overschrijven van bestanden met scripts van de service en de uitvoering van zijn eigen code op de server de locatie waar de uitpakoperatie plaatsvond.

Bij het laden van updates vanuit Git werd ontdekt dat de handler die updates laadt geen rekening hield met symbolische links bij het kopiƫren van bestanden uit Git. Deze eigenschap stelde aanvragers in staat om alle bestanden met de server toe te voegen via symbolische links in Git.

Experimenten met het demonstreren van de hack van cdnjs voor het verkrijgen van een beloning op HackerOne begonnen met het testen van hypotheses over het lezen van bestanden. In de Git-repository van de via CDN geleverde JavaScript-bibliotheek werd een symbolische link test.js toegevoegd, die naar het bestand /proc/self/maps wees. Na het publiceren van een nieuwe versie van de bibliotheek verwerkte de update-handler deze repository en publiceerde het opgegeven bestand in cdnjs (test.js was gemaakt als een symbolische link en bij het opvragen van dit bestand werd de inhoud van /proc/self/maps weergegeven).

Door een symbolische link naar het bestand /proc/self/environ te plaatsen, merkte de auteur van het onderzoek op dat de uitgegeven gegevens de waarden van de omgevingsvariabelen GITHUB_REPO_API_KEY en WORKERS_KV_API_TOKEN bevatten. In de eerste variabele werd de API-sleutel bewaard voor schrijfaccesso tot de repository robocdnjs op GitHub. In de tweede variabele werd de token voor de KV-opslag in cdnjs bewaard. Met deze verkregen informatie kon de aanvaller wijzigingen aanbrengen in cdnjs en de infrastructuur volledig compromitteren.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster