Aperçu Snyk du rapport 2019 sur l’état de la sécurité open source de Node.js et npm
9 octobre 2019
0 minutes de lectureDans le rapport 2019 sur l’état de la sécurité open source, nous avons voulu prendre le pouls de la sécurité open source dans les différents écosystèmes de langages de programmation. Nous avons analysé les réponses de plus de cinq cents utilisateurs et responsables de projets open source, qui nous ont éclairés sur leurs processus, leur connaissance des risques liés à la sécurité open source et le niveau de compétence du responsable de projet moyen.
En plus des informations recueillies auprès des participants à l’enquête, nous avons également analysé des données issues de plusieurs sources publiques et privées, notamment la base de données des vulnérabilités de Snyk, afin d’évaluer les différences entre les problèmes de sécurité selon les langages, le délai d’adoption des mises à niveau apportant des correctifs de sécurité, et bien plus encore. Dans le rapport de cette année, nous avons également étudié les répercussions des vulnérabilités sur les utilisateurs de Docker et les mesures à connaître pour limiter les risques de sécurité.
Effectuez un test rapide pour détecter les vulnérabilités connues dans les dépôts GitHub publics et les paquets npm.
L’écosystème npm
Lorsque nous avons examiné la Snyk Vulnerability Database, nous avons relevé plusieurs types de vulnérabilités particulièrement présents dans les écosystèmes JavaScript et Node.js. La première catégorie, celle des traversées de chemins et de répertoires, se démarque dans l’écosystème npm, avec un nombre record de divulgations en 2017 et 2018 : 146 et 143 respectivement. Les autres écosystèmes sont bien loin derrière — ou, devrais-je dire, devant ? Quoi qu’il en soit, avoir moins de vulnérabilités signalées est une bonne chose !
Des centaines de ces vulnérabilités sont à mettre au compte des recherches en sécurité menées par Snyk en collaboration avec Liang Gong, chercheur en sécurité chez Facebook et doctorant en informatique à Berkeley. Ces travaux ont permis de découvrir des dizaines de vulnérabilités de traversée de répertoires dans l’écosystème npm. Ils ont également montré que les serveurs Web statiques et dynamiques sont très répandus dans le registre npm, car de nombreux cas d’usage des développeurs en ont besoin.

Un autre type de vulnérabilité intéressant, presque exclusivement associé à Node.js, est le déni de service par expression régulière (ReDoS). Ce type d’attaque exploite la complexité non linéaire dans le pire des cas à laquelle peuvent aboutir certains modèles d’expressions régulières. Pour un environnement d’exécution monothread, les conséquences peuvent être dévastatrices ; c’est pourquoi Node.js est particulièrement touché par ce type de vulnérabilité. La situation pourrait bien sûr évoluer avec la popularité croissante des technologies serverless. Avec un modèle de paiement à l’usage, une attaque ReDoS entraînera une mise à l’échelle dynamique du système, ce qui pourrait coûter très cher à son propriétaire — une forme de déni de financement, peut-être !
L’environnement d’exécution Node.js est réputé pour ses nombreux atouts. La boucle d’événements monothread en est un, mais elle peut aussi devenir son maillon faible lorsqu’elle est mal utilisée. Cela arrive plus souvent qu’on ne le pense. En mars 2018, une mise à jour de sécurité de l’environnement d’exécution officiel de Node.js comprenait un correctif pour une vulnérabilité ReDoS de gravité élevée dans le module de chemin principal, qui affectait les versions de Node.js 4.x. Le correctif de cette vulnérabilité, découverte par James Davis de Virginia Tech, a également été intégré à Node.js 6.x et aux versions ultérieures afin de limiter le problème.
Pour souligner le caractère singulier de cette vulnérabilité dans Node.js, nous avons étudié d’autres écosystèmes entre 2016 et 2019. Nous avons constaté qu’une seule vulnérabilité ReDoS avait été signalée en PHP en 2017. Les écosystèmes Java et Ruby ont chacun enregistré une vulnérabilité en 2018. En revanche, 116 vulnérabilités ont été signalées au total pour Node.js au cours des trois dernières années, et leur taux de divulgation est en hausse. Cela dit, il est important de distinguer les vulnérabilités présentes dans le code de celles qui sont effectivement signalées. Ces chiffres ne renseignent pas sur le nombre de vulnérabilités introduites dans les bases de code pendant cette période, mais plutôt sur le nombre de celles qui ont été découvertes et éliminées. Nous aurions tout aussi bien pu examiner ce graphique avec satisfaction, car il montre que des efforts sont consacrés à la recherche et à l’élimination des vulnérabilités ReDoS, ce qui devrait permettre de rencontrer moins de problèmes à l’avenir.

Poursuivez votre lecture pour découvrir d’autres conclusions du rapport et consultez le nouveau rapport 2020 sur l’état de la sécurité open source !