Cloudflare: une faille critique du CDN a permis la compromission de 12% de tout les sites

0

Cloudflare a corrigé une vulnérabilité critique dans son CDNJS gratuit et open source, affectant potentiellement 12,7% de tout les sites Web sur Internet.

CDNJS sert des millions de sites Web avec plus de 4 000 bibliothèques JavaScript et CSS stockées publiquement sur GitHub, ce qui en fait le deuxième plus grand CDN JavaScript.

Les exploits de vulnérabilité comprenaient la publication de packages sur le CDNJS de Cloudflare à l’aide de GitHub et de npm, pour déclencher une vulnérabilité Path Traversal et, éventuellement, l’exécution de code à distance.

Si elle était exploitée, la vulnérabilité conduirait à une compromission complète de l’infrastructure de CDNJS.

Du « ZIP Slip » à l’exécution de code à distance

La semaine dernière, le chercheur en sécurité RyotaK explique comment il a pu trouver une méthode pour compromettre complètement le réseau CDNJS de Cloudflare tout en recherchant des attaques de chaîne d’approvisionnement.

Les réseaux de diffusion de contenu (CDN) jouent un rôle essentiel dans le maintien de la sécurité, de l’intégrité et de la disponibilité d’Internet, car une grande majorité de sites Web s’appuient sur ces services pour charger des bibliothèques JavaScript et des scripts CSS populaires.

Les CDN peuvent devenir une cible de choix pour les adversaires car, si ils sont compromis, l’attaque peut avoir des conséquences de grande envergure pour de nombreux sites Web, boutiques en ligne et leurs clients.

En parcourant cdnjs.com, RyotaK a remarqué que pour les bibliothèques qui n’existaient pas encore dans CDNJS, il pouvait suggérer l’ajout d’une nouvelle bibliothèque via le référentiel GitHub de CDNJS.

cloudflare cdn
Les utilisateurs peuvent demander qu’un package soit publié sur le référentiel GitHub de CDNJS

Après avoir exploré ce référentiel GitHub et les autres qui, ensemble, font fonctionner l’écosystème CDNJS, RyotaK a trouvé un moyen de tromper les serveurs pour qu’ils exécutent du code arbitraire.

En particulier, le chercheur a étudié les scripts présents dans cdnjs/bot-ansible et cdnjs/tools, y compris un script de mise à jour automatique qui facilitait la récupération automatique des mises à jour de la bibliothèque.

Ces scripts mettraient périodiquement à jour le serveur CDNJS avec les nouvelles versions des bibliothèques logicielles publiées par leurs auteurs sur le registre npm correspondant.

En d’autres termes, pour chaque bibliothèque publiée sur le référentiel GitHub de CDNJS, sa version la plus récente serait téléchargée à partir du registre npm lié, la version npm étant également maintenue par l’auteur de la bibliothèque.

RyotaK s’est demandé ce qui se passerait si une bibliothèque qu’il avait publiée sur CDNJS avait sa version npm correspondante contenant un exploit Path Traversal.

Notez que les packages npm sont publiés en tant qu’archives TGZ (.tar.gz) qui peuvent facilement être conçues avec des exploits Path Traversal cachés à l’intérieur.

Le chercheur a d’abord publié une bibliothèque de test appelée hey-sven sur CDNJS à l’aide de GitHub, puis a commencé à publier de nouvelles versions de « hey-sven » sur le registre npm.

Dans les nouvelles versions « hey-sven » publiées sur npm, qui finiraient par être traitées par les robots de mise à jour de CDNJS, le chercheur a injecté des scripts Bash sur des chemins étranges.

Ces chemins distincts ne sont rien d’autre que des exploits Path Traversal cachés dans les archives ZIP/TGZ, un concept popularisé en 2018 sous le nom de « ZIP Slip ».

cloudflare hey-sven
Les versions npm 1.0.1 et 1.0.2 de la bibliothèque « hey-sven » contenaient des exploits Path Traversal

Une fois que les serveurs CDNJS ont traité les archives npm « hey-sven » conçues, le contenu de ces scripts Bash serait exécuté sur le serveur.

Mais, le chercheur ne voulait pas écraser accidentellement un script existant, il a donc d’abord utilisé une vulnérabilité de lien symbolique pour lire le contenu du fichier qu’il était sur le point d’écraser, lors de ce test de validation de principe (PoC).

« Comme Git prend en charge les liens symboliques par défaut, il peut être possible de lire des fichiers arbitraires à partir du serveur de mise à jour de la bibliothèque cdnjs en ajoutant un lien symbolique dans le référentiel Git. »

« Si le fichier de script exécuté régulièrement est écrasé pour exécuter des commandes arbitraires, la fonction de mise à jour automatique peut être interrompue, j’ai donc décidé de vérifier d’abord la lecture du fichier arbitraire », a déclaré le chercheur.

Dès que sa validation de principe conçu a atteint le serveur, RyotaK a pu récupérer de manière inattendue des secrets sensibles tels que GITHUB_REPO_API_KEY et WORKERS_KV_API_TOKEN dans des scripts servis par le CDN sur https://cdnjs.cloudflare.com/…

cloudflare
La sortie de la validation de principe du lien symbolique initial a fourni au chercheur des clés secrètes

GITHUB_REPO_API_KEY est une clé API accordant des autorisations d’écriture, permettant à un attaquant de modifier n’importe quelle bibliothèque sur le CDNJS ou de falsifier le site Web cdnjs.com lui-même !

WORKERS_KV_API_TOKEN pourrait en revanche être utilisé pour falsifier les bibliothèques présentes dans le cache de Cloudflare Workers.

« En combinant ces autorisations, la partie centrale de CDNJS, telle que les données d’origine de CDNJS, le cache KV et même le site Web de CDNJS, pourrait être complètement falsifiée », explique le chercheur.

Cloudflare publie de nombreux correctifs pour éliminer le bogue

Le chercheur a signalé cette vulnérabilité à Cloudflare via le programme de divulgation des vulnérabilités de HackerOne le 6 avril 2021, et a vu l’équipe de Cloudflare appliquer un correctif intermittent en quelques heures.

Le correctif initial vise à résoudre la vulnérabilité du lien symbolique :

initial fix cloudflare cdn
Correctif initial appliqué par le CDNJS de Cloudflare (GitHub)

Cependant, en raison de la complexité de l’écosystème CDNJS, une série de correctifs plus concrets ont été appliqués au cours des semaines suivantes à différents référentiels, selon le chercheur.

RyotaK a partagé que si le premier correctif était centré sur le rejet des liens symboliques dans les référentiels Git, ils n’ont résolu qu’une partie du problème.

« Ils ont d’abord essayé de refuser les liens symboliques, mais ils ont remarqué que la conception actuelle du bot est trop dangereuse. Ils ont donc isolé les fonctionnalités les plus dangereuses. »

« Et pour d’autres fonctionnalités, ils ont appliqué AppArmors », a déclaré le chercheur dans une interview.

Application Armor ou AppArmor est une fonction de sécurité qui restreint les capacités des programmes exécutés sur des environnements basés sur Unix avec des profils prédéfinis afin que les programmes ne dépassent pas par inadvertance leur portée d’accès prévue.

Le chercheur a également partagé une série de correctifs déployés par Cloudflare pour sécuriser le bot automatisé traitant les bibliothèques mises à jour:

cloudflare cdnjs
Cloudflare apporte plusieurs modifications à CDNJS pour résoudre le bogue

« Bien que cette vulnérabilité puisse être exploitée sans aucune compétence particulière, elle pourrait avoir un impact sur de nombreux sites Web. »

« Étant donné qu’il existe de nombreuses vulnérabilités dans la chaîne d’approvisionnement, qui sont faciles à exploiter mais ont un impact important, j’ai l’impression que c’est très effrayant », déclare RyotaK dans son article de blog.

Le chercheur a fait l’éloge des équipes de réponse aux incidents rapides de Cloudflare, qui, quelques minutes après avoir reçu le rapport du chercheur, ont modifié les secrets divulgués et ont travaillé avec lui pour étudier les exploits de validation de principe.

Un porte-parole de Cloudflare a déclaré que la vulnérabilité n’avait pas été exploitée et qu’il était reconnaissant au chercheur d’avoir signalé le problème.

« Comme le montre le rapport, les systèmes automatisés ont détecté le travail [du chercheur] et ont immédiatement révoqué les informations d’identification. »

« Le chercheur nous a fait part de ses découvertes le 6 avril et nous avons résolu le problème dans les 24 heures. »

« En outre, il est important de noter que nous verrons de plus en plus de chercheurs publier des choses comme celle-ci, d’autant plus que nous élargissons notre programme de primes et le rendons plus public au fil du temps. »

« Nous sommes heureux de voir les chercheurs effectuer ce type de test – et qu’ils le partagent avec nous. Nous voulons en voir plus », a déclaré Cloudflare.

Si cet article vous a plu, n’oubliez pas de jeter un œil à nos bons plans.

Laisser un commentaire