La sécurité des applications Web : La gestion des dépendances

Évolution du nombre de paquet pour divers gestionnaire de dépendances

Les points faibles de l’écosystème npm

Nous allons voir que les différents points faibles de npm sont :
Le verrouillage des dépendances
Npm laisse la possibilité au développeur de sélectionner la version d’un paquet ce qui permet une plus grande stabilité du code. Cependant, le désavantage de cette approche est que dans le cas où une vulnérabilité quelconque est fixée dans une version, cette vulnérabilité ne sera pas fixée dans toutes les applications qui utilisent le paquet dans une version ultérieure.

Exemple de vulnérabilités provenant de la gestion de versions de dépendance ( cas 1 )
Exemple de vulnérabilités provenant de la gestion de versions de dépendances ( cas 2 )

Exemple de vulnérabilité

Un exemple de vulnérabilité flagrant est le cas du paquet eslint-scope en Juin 2018 où les identifiants d’un des développeurs chargé de la maintenance du paquet ont été compromis. Cette compromission des identifiants a permis à un attaquant de déployer une version malveillante du paquet qui tentait d’envoyer le contenu du fichier .npmrc qui contient les jetons d’identification de développeurs à un serveur distant. La récupération de ces jetons aurait pu permettre à l’attaquant de répéter l’attaque sur un autre paquet et répandre des malwares dans l’écosystème npm. Pour empêcher la propagation de malware, l’ensemble des jetons d’identification ayant été générés avant la révélation de la vulnérabilité ont été invalidés par les administrateurs de l’écosystème npm.

Liste des menaces sur l’écosystème npm

Les listes des menaces qui pèsent sur l’écosystème npm sont les suivantes:
Paquets malveillant (TM-mal)
Des attaquants peuvent publier des paquets contenant du code malveillant sur npm. Ces paquets pourront ensuite être installés ou utilisés comme dépendance par d’autres paquets.

État de l’art sur l’écosystème npm

L’ensemble de ce bilan sur l’écosystème est basé d’après les papiers de recherche [6], [12] [13].
Nous allons dans un premier temps parler des dépendances des paquets et des problèmes qui les accompagnent, puis nous effectuerons une analyse des mainteneurs, pour finir par une analyse des politiques de sécurité de l’écosystème.

Dépendance des paquets

Le nombre de paquets sur l’écosystème npm est en hausse depuis sa création. Cette croissance est une bonne chose et c’est la preuve que npm est un écosystème grandissant. Néanmoins cette croissance favorise l’utilisation de dépendance dans des applications et en tant que dépendance de paquet. Cette croissance participe aussi à augmenter la surface d’attaque possible pour des attaquants utilisant des attaques de type TM-pkg.

Dépendance directe et transitive des paquets

Evolution du nombre de dépendance directe et transitive [12]

Portée d’un paquet

Evolution de la portée des 5 paquets les plus populaires [12]
Evolution de la portée des paquets [6]

Analyse des mainteneurs

Avec la croissance de l’écosystème npm, on pourrait s’attendre à ce que cette croissance soit due à de nouveaux développeurs développant de nouveaux paquets. Néanmoins, d’après les chiffres, on se rend compte que le nombre de paquet moyen par développeur n’a fait qu’augmenter. Il est passé de 2.5 en 2012 à 4.5 en 2018. En observant la distribution des données on s’aperçoit que la plupart des développeurs ne maintiennent que peu d’application mais que certains mainteneurs ont une influence gigantesque (plus de 100 paquets).

Portée combinée des 100 mainteneurs les plus influents [12]

Evolution des politiques de sécurité de NPM

On constate une évolution du nombre de rapport de sécurité pour 10 000 paquets qui a augmenté de 2 à presque 8. Cette augmentation est le signe d’une communauté saine, qui signale les vulnérabilités de paquets à un bon rythme et dont le rythme de l’identification de vulnérabilité reste à jour avec la croissance de l’écosystème.

Evolution du nombre de report de sécurité total et non corrigés [12]
Portée totale de l’ensemble des paquets comportant au moins une vulnérabilité non corrigée [12]

Impact des vulnérabilités sur les applications web

Pour discuter de l’impact des vulnérabilités des paquets sur les applications nous allons nous baser sur [13] qui étudie l’impact des failles de sécurité des dépendances npm sur un client web. Pour procéder à cette étude, les chercheurs ont sélectionné des paquets dans l’écosystème npm en fonction de leur popularité.
Les dépendances retenues sont les suivantes :

  • Angular
  • ws
  • marked
Proportion des stratégies de migration de dépendance en fonction des paquets [13]

Stratégie de contre mesure

Pour faire face à ces vulnérabilités plusieurs stratégies sont proposées :
Filtrage de code
La mise en place d’un filtrage automatique du code lors de la publication d’un paquet à la manière des app stores pour les applications smartphones pourrait être une solution. Vérifier et patcher les vulnérabilités des 1500 paquets les plus populaires pourrait permettre de diviser par 2 le nombre de paquets auxquels un utilisateur fait implicitement confiance lors de l’installation d’un paquet par 10. Dans le cas d’une vérification des 4000 paquets les plus populaires, l’ITP serait alors réduit par un facteur 25.

Evolution de l’ITM et l’ITP en fonction du nombre de paquet ou mainteneurs vérifiés [12]
Corrélation entre le nombre de vulnérabilités d’un paquet et le nombre de dépendances transitives [12]

Conseils pratiques pour les développeurs

Les conseils pour la sécurité varient selon le type d’application web ainsi que sa nouveauté. Dans le cas d’une nouvelle application, l’utilisation d’un langage sécurisé comme JIF peut être une solution. Malheureusement, de telles solutions ne sont pas applicables à toutes les applications. Il convient donc au développeur de mettre en place des solutions qui permettent de sécuriser les applications web.

Résultat de la commande npm audit

--

--

interested in fitness, automation, developpement and biology

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Random Dude

Random Dude

interested in fitness, automation, developpement and biology