Une vulnérabilité par déni de service découverte dans le package JavaScript Axios : toutes les versions de ce client HTTP populaire sont concernées
6 mai 2019
0 minutes de lectureaxios est un client HTTP JavaScript moderne populaire, basé sur les promesses et couramment utilisé dans les projets pour navigateur et serveur Node.js. Il totalise plus de 3 millions de téléchargements hebdomadaires sur npm.
Snyk a enregistré une vulnérabilité de sécurité de gravité moyenne (5,3 CVSS) liée à un déni de service affectant axios. Celle-ci avait été évoquée et signalée dès 2017 par le développeur Jeremy Apthorp dans la file des problèmes GitHub du projet.
Les versions concernées d’axios sont vulnérables au déni de service (DoS), car le contenu des requêtes continue d’être traité même après le dépassement de maxContentLength, ce qui entraîne une hausse de l’utilisation des E/S et du processeur.
À propos de la vulnérabilité
Anthorp a partagé un extrait de code dans le problème GitHub pour montrer un exemple d’utilisation de l’API d’axios qui limite la taille de la réponse HTTP reçue :
Cependant, quelle que soit la limite de taille du contenu, la connexion HTTP reste ouverte jusqu’au transfert de l’intégralité du fichier. Ainsi, toute personne contrôlant le domaine distant ou interceptant les données sur une connexion non sécurisée peut envoyer un fichier volumineux et empêcher la requête d’aboutir pendant une durée considérable.
Au moment de la rédaction de cet article, aucun correctif officiel n’a été publié pour cette vulnérabilité. Toutefois, la communauté a ouvert une Pull Request pour corriger le problème dans le dépôt GitHub du projet, qui attend d’être fusionnée et publiée.
Les utilisateurs de Snyk sont protégés grâce à l’application d’un correctif de sécurité pour les versions d’axios >= 0.17.0, qui atténue la vulnérabilité de déni de service.
Connectez votre dépôt et appliquez le correctif.
MISE À JOUR 31/05/2019 : un correctif a été publié et est disponible dans les versions d’axios >= 0.19.0
Snyk a détecté cette vulnérabilité dans plus de 215 000 projets analysés et a immédiatement averti les utilisateurs concernés. Les utilisateurs de notre solution de surveillance de la sécurité à l’exécution ont non seulement été informés de la vulnérabilité, mais aussi de l’urgence à la corriger, car dans la plupart des cas, elle est atteignable dans le flux d’exécution de l’application et présente donc une forte probabilité d’exploitation.
Dans le cas d’axios, l’intégration de la surveillance de la sécurité à l’exécution à leur application a permis d’améliorer leur capacité à détecter les problèmes de sécurité dans les déploiements en production.
Suis-je concerné et que dois-je faire ?
Si vous demandez des ressources auprès de sources non fiables ou par des moyens non sécurisés, vous êtes potentiellement vulnérable à un déni de service lorsque des utilisateurs malveillants peuvent contrôler la ressource distante.
L’utilisation d’axios sur un serveur Node.js peut avoir des conséquences désastreuses en raison de la nature monothread de l’environnement d’exécution. Une hausse de l’utilisation des ressources, comme les E/S et le processeur, affecte négativement tous les utilisateurs connectés à ce serveur. Dans les environnements de navigateur, le déni de service affecte les utilisateurs finaux à des degrés divers, selon la façon dont l’application utilise axios pour récupérer les ressources.
Que dois-je faire ?
Si vous utilisez Snyk, vous pouvez vous protéger automatiquement en appliquant le correctif de sécurité mentionné précédemment.
Appliquez l’atténuation suivante dans chacun de vos appels à axios afin d’écrire du code défensif contre cette vulnérabilité :
axios({ url: ..., maxContentLength: 2000, }).catch((error) => { error.request.res.destroy(); });Cette solution est suggérée dans https://github.com/axios/axios/issues/1098#issuecomment-334874694Appliquez manuellement le correctif proposé dans la Pull Request : https://github.com/axios/axios/pull/1485
Quelques mots sur la santé des projets open source
La maintenance d’un projet open source peut devenir de plus en plus difficile à mesure que sa popularité grandit. Le nombre de problèmes augmente et exige toujours plus d’attention ; la documentation doit être créée et tenue à jour ; il faut aussi corriger les bogues et publier des versions stables, pour ne citer que quelques-unes des tâches attendues des responsables de projet, qui sont souvent entièrement bénévoles.
Pour réduire autant que possible les perturbations de vos projets, choisissez vos dépendances open source avec discernement. Voici plusieurs aspects de l’état de santé des dépendances du projet axios que nous pouvons découvrir grâce aux analyses de Snyk :
axios a publié sa première version, la 0.1.0, il y a 5 ans, le 29 août 2014.
La dernière version stable, la 0.18.0, a été publiée il y a 9 mois, le 19 février 2018.
Toutes les versions publiées sont affectées par la vulnérabilité de déni de service mentionnée précédemment.
Le projet a reçu des contributions de 159 développeurs, mais les publications restent gérées par les responsables du projet Nick Uraltsev et Matt Zabriskie.
Lancez-vous dans les compétitions Capture The Flag
Apprenez à résoudre des défis de capture du drapeau en regardant à la demande notre atelier virtuel d’initiation.
