Vérifier que vos sources de scripts tiers sont fiables est important. Mais cela seul peut ne pas suffire.
C'est ce que le monde a appris en 2021, lorsqu'une vulnérabilité majeure dans le cdnjs de Cloudflare a été signalée. Voici le récapitulatif de ce qui s'est passé et comment.
Cdnjs est l'un des réseaux de diffusion de contenu (CDN) JavaScript les plus utilisés aujourd'hui. Plus de 12 % de tous les sites web sur internet injectent au moins un script via cdnjs. Un chercheur utilisant le pseudonyme « RyotaK » a partagé une vulnérabilité de chaîne d'approvisionnement dans cdnjs, permettant à n'importe qui sur internet d'apporter des modifications aux bibliothèques cdnjs en suivant une séquence d'étapes spécifiques. Voici l'intégralité de ses conclusions.
La vulnérabilité existait au sein du serveur de mise à jour des bibliothèques cdnjs. Ce module spécifique aide les développeurs à intégrer en toute sécurité des packages populaires dans leurs sites.
La vulnérabilité en détail
En publiant un fichier .tgz dans le registre npm avec un nom de fichier conçu pour exploiter cette faille de traversée de chemin, un attaquant pouvait amener le serveur de mise à jour des bibliothèques cdnjs à traiter le fichier malveillant. Cela aurait écrasé un fichier de script exécuté régulièrement, entraînant une exécution de commandes arbitraires sur les serveurs de Cloudflare.
Pour prouver l'exploitabilité, une démonstration a été planifiée. Elle consistait à créer un fichier .tgz qui, lors de son traitement par le mécanisme de mise à jour de cdnjs, écraserait un script anodin avec du code malveillant. Cependant, avant d'exécuter ce plan, le chercheur a découvert un autre vecteur d'attaque puissant via les mises à jour de dépôts Git, impliquant des liens symboliques susceptibles de lire des fichiers arbitraires depuis le serveur de mise à jour.
Une erreur involontaire dans le processus de démonstration a conduit à une révélation importante. Un lien symbolique censé pointer vers un fichier inoffensif a été dirigé par erreur vers /proc/self/environ, exposant des variables d'environnement sensibles, notamment GITHUB_REPO_API_KEY et WORKERS_KV_API_TOKEN. Cette erreur a mis en évidence comment un attaquant pouvait accéder à la majeure partie de l'infrastructure cdnjs, représentant un risque de sécurité considérable.
Les risques potentiels
Cela aurait pu entraîner une exécution de code à distance sur les serveurs de Cloudflare et la possibilité d'injecter du code malveillant dans les scripts utilisés par tous les utilisateurs finaux. Cela contourne les pare-feux applicatifs web (WAF) et tout autre mécanisme de filtrage, puisque le code s'exécute directement dans le navigateur.
Comme mentionné précédemment, cela aurait exposé plus de 12 % des sites web et l'ensemble de leurs visiteurs à un danger immédiat si la faille avait été exploitée (une fois les caches expirés).
Cloudflare a réagi rapidement et a pris les mesures appropriées avant que quiconque ne puisse exploiter la faille. Ils sont reconnus pour leurs post-mortems détaillés et très transparents ainsi que leurs divulgations d'incidents. L'intégralité des détails peut être consultée ici.
La meilleure approche
Tout cela démontre qu'on ne peut pas simplement faire confiance aux sources.
Même les meilleurs au monde sont sujets aux erreurs. Une approche plus sûre et plus sécurisée consiste à vérifier ce que ces sources délivrent.
C'est pourquoi cside existe. Nous proposons un petit script à ajouter à une page web, qui fait 2 choses :
- Réécrire les sources des scripts pour les faire transiter par cside. cside s'insère ainsi dans le flux de la requête entre l'utilisateur et le script tiers, permettant une visibilité totale sur les scripts servis. Nous ne nous contentons pas de mettre des sources sur liste blanche, mais nous analysons en profondeur chaque script, pour 100 % des sessions. Dans certains cas, des optimisations peuvent même être réalisées grâce à la mise en cache des scripts statiques.
- Effectuer des vérifications comportementales côté navigateur.
cside surveille également plus de 60 attributs et utilise l'IA pour signaler en temps réel tout indicateur d'intention malveillante. Notre solution prend en compte le contexte historique, ce qui signifie que les changements dans le temps sont pris en considération, facilitant ainsi la détection des détournements. De plus, cside utilise l'IA pour analyser le code des scripts tiers. La combinaison de nos mécanismes de détection en constante évolution nous permet de repérer la tentative en quelques millisecondes et de la bloquer avant toute opération malveillante, ou d'alerter si un comportement dangereux se manifeste.




