Skip to main content

Ce ne sont pas les packages npm que vous cherchez

Écrit par
Headshot of DeveloperSteve Coochin

DeveloperSteve Coochin

feature may base

4 mai 2022

0 minutes de lecture

Au fil des ans, en tant que développeur, j’ai conçu et déployé de nombreuses applications dans le cadre de projets menés par des agences numériques, de projets personnels, de startups et de missions en freelance. Avec des délais serrés, les attentes des clients et les dates de livraison à respecter, la sécurité n’était généralement pas une priorité lorsque j’installais un package open source avec npm. Cela m’amenait souvent à retravailler et à nettoyer des déploiements qui avaient laissé entrer des vulnérabilités connues, ce qui allongeait encore les délais et décevait les clients.

Plus tôt cette année, plus de 500 packages malveillants ont été publiés dans l’écosystème npm pour semer la confusion des dépendances au sein des applications. Ces packages injectaient directement du code et des fonctionnalités indésirables, ou introduisaient du code malveillant via l’injection d’une bibliothèque open source directe ou dépendante.

À l’image des premiers films Star Wars, ces packages malveillants tentaient de s’infiltrer dans nos applications à coups de truc Jedi. Face à la multiplication de ces incidents, il est important de prendre le temps et les précautions nécessaires pour protéger nos déploiements.

Voyons comment mieux protéger vos applications contre l’injection de dépendances.

Faites preuve de diligence

Il est toujours important de comprendre ce qu’utilise votre application à chaque étape du développement. Environ 80 % des vulnérabilités de l’écosystème npm proviennent de chemins vulnérables dans les dépendances. C’est pourquoi la diligence est essentielle. Pour garantir la sécurité, nous devons comprendre comment les packages open source que nous choisissons ont été créés et quel soutien les accompagne.

Pour cela, vous pouvez examiner les fonctionnalités de la bibliothèque sur la page npm du package ou dans le dépôt Git. Vous pourrez ainsi connaître le nombre de versions publiées, évaluer le niveau de prise en charge et voir les dépendances requises par le package.

Page du package npm Electron affichant le logo Electron, la commande d’installation « npm i electron », les téléchargements hebdomadaires, la version, la licence et les détails du projet.

Une autre méthode pratique consiste à utiliser Snyk Advisor, qui fournit des informations utiles sur l’état du package et les types de vulnérabilités détectées au fil du temps.

L’un des grands avantages de la page Snyk Advisor est qu’elle donne une vue d’ensemble du projet, avec notamment un score de santé fondé sur la communauté, la popularité, la sécurité et la maintenance.

Page Snyk Advisor du package npm Electron présentant un score de santé de 92/100, son état de sécurité et des packages similaires.

Cette page présente également des graphiques temporels utiles, qui illustrent des statistiques de popularité comme le nombre de téléchargements par semaine, le nombre de commits apportés par la communauté et celui des problèmes encore ouverts. Ces données permettent d’évaluer l’activité de la communauté ainsi que l’adoption au sein de l’écosystème.

Tableau de bord de maintenance indiquant un état sain, avec la fréquence mensuelle des commits d’avril 2021 à avril 2022 et des indicateurs d’activité du dépôt.

Ces deux graphiques montrent à quelle vitesse la communauté pourrait se mobiliser pour corriger les problèmes de sécurité qui apparaissent dans le projet.

Créer des arbres de dépendances

Un seul npm install peut ajouter des centaines de bibliothèques à votre application Node. Electron, par exemple, compte trois dépendances principales, dont certaines ont elles-mêmes des dépendances qui seront automatiquement ajoutées à une application basée sur Electron.

Les arbres de dépendances aident à repérer les packages ajoutés par l’intermédiaire d’une bibliothèque ou d’une dépendance. Plus important encore, ils facilitent la création d’une SBOM (nomenclature logicielle) en identifiant les composants utilisés dans votre application.

Il existe plusieurs façons de générer un arbre de dépendances, par exemple :

Utiliser un outil de cartographie visuelle

Les outils de cartographie visuelle sont pratiques pour générer des cartes des dépendances, car ils affichent visuellement tous les composants open source utilisés par votre application.

J’ai notamment utilisé npmgraph.an, un outil qui génère une vue en 2D de l’arbre des dépendances à partir d’une seule bibliothèque npm. Une fois l’arbre créé, vous pouvez cliquer sur les nœuds représentant les dépendances pour afficher plus d’informations dans un panneau à gauche.

Graphe des dépendances du package npm fs-extra@8.1.0, avec les détails du package et les avatars des responsables affichés dans une barre latérale

Utiliser npm en ligne de commande

J’apprécie la polyvalence de npm : il permet aussi bien d’installer une bibliothèque globale comme Snyk CLI que de générer la liste des bibliothèques et des dépendances.

Pour générer un arbre, accédez au répertoire racine d’un projet contenant un fichier manifeste et saisissez npm list. La commande affiche une liste textuelle de toutes les bibliothèques de premier niveau utilisées par une application basée sur npm. Pour obtenir davantage d’informations sur un package spécifique, vous pouvez aussi saisir npm list [package].

Sortie du terminal affichant l’arborescence des dépendances d’un package npm, avec les noms des packages et leurs numéros de version.

Toutefois, la commande précédente n’affiche pas les dépendances imbriquées. Pour les afficher, nous devons utiliser l’option --depth. Par exemple, en exécutant npm list --depth=5 dans le répertoire racine d’un projet npm, vous obtiendrez un arbre plus détaillé.

Sortie du terminal affichant la commande npm list --depth=5 et l’arborescence des dépendances de packages JavaScript installés.

Vous pouvez également définir la profondeur pour un package en particulier avec npm list [package] --depth=5. L’un des inconvénients de cette méthode de tri des packages est qu’il peut être difficile de s’y retrouver. Il est facile de se perdre dans l’arbre, surtout lorsque les cartes de dépendances sont volumineuses.

Utiliser Snyk Open Source

Cette méthode combine la vue arborescente en ligne de commande et la cartographie visuelle, avec en plus la détection des vulnérabilités.

Pour commencer, créez un compte Snyk gratuit et connectez-vous. Reliez ensuite à Snyk le dépôt dans lequel votre application est stockée, puis lancez une analyse. Pour cela, cliquez sur le bouton Add Project et sélectionnez le dépôt de votre choix.

Options d’intégration aux dépôts : GitHub, Cloud Foundry, Bitbucket Cloud, CLI, surveillance des dépôts GitHub publics et autres sources

Suivez les étapes de connexion du dépôt et autorisez Snyk à y accéder.

Conseil pratique : Sur la plupart des plateformes, l’analyse fonctionne que le dépôt soit public ou privé.

Une fois la connexion établie, recherchez et sélectionnez le dépôt de l’application pour laquelle vous souhaitez générer un arbre. Cliquez ensuite sur le bouton Add selected repositories en haut à droite pour lancer l’analyse.

Écran de sélection de dépôt GitHub dans Snyk, affichant une recherche de « nodejs-goof » et le dépôt snyk-labs sélectionné.

Une fois l’analyse terminée, vous verrez une vue agrégée des résultats. Développez le niveau supérieur à l’aide de la flèche déroulante pour afficher le détail de chaque élément détecté par l’analyse.

Tableau de bord d’analyse de sécurité pour developersteve/nodejs-goof, présentant les résultats de l’analyse du code, du Dockerfile et du fichier package.json, avec le nombre de vulnérabilités par niveau de gravité et les durées des tests.

Pour cet exercice, nous recherchons quelques éléments dans le manifeste de package npm package.json. Cliquez sur la ligne package.json pour développer la liste et afficher les chemins vulnérables détectés dans certaines bibliothèques, des informations supplémentaires sur les correctifs recommandés, et bien plus encore.

Tableau de bord de sécurité affichant 93 problèmes, dont une vulnérabilité critique dans adm-zip avec le CVE-2018-1002204 et un score CVSS de 9,4

C’est ici que la magie Jedi opère vraiment. Cliquez sur l’onglet Dependencies pour afficher la liste des dépendances du projet. Cliquez sur l’icône de l’arborescence en haut à droite pour voir des informations comme les relations entre les bibliothèques et l’emplacement des vulnérabilités détectées.

Arbre des dépendances Snyk affichant goof@1.0.1 et des packages npm imbriqués, avec des badges signalant des problèmes de sécurité et 565 dépendances répertoriées

Vous disposez maintenant d’un arbre interactif des bibliothèques et des dépendances qui vous montre où commencent les chemins vulnérables.

Le principal avantage de la génération d’un arbre de dépendances avec Snyk, ce sont les analyses continues : elles vous alertent sur les nouvelles vulnérabilités et suggèrent des mesures correctives, comme des mises à niveau de version ou des correctifs personnalisés. Vous pouvez même configurer la création automatique de pull requests dans votre dépôt pour corriger encore plus rapidement les vulnérabilités détectées.

Que la source (ouverte) soit avec vous

Examiner régulièrement vos composants open source est essentiel pour préserver la sécurité de vos applications. Les arbres de dépendances sont un excellent point de départ pour comprendre ce que vous utilisez, mais il est également essentiel d’analyser régulièrement votre application à l’aide d’un outil d’analyse de la composition logicielle (SCA), comme Snyk Open Source.

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.

Lire la suite

illustration hero ai
Blog

PHP corrige deux vulnérabilités RCE critiques exploitables sans authentification (CVE-2026-109618, CVE-2026-109619) : mettez à jour dès maintenant

Deux vulnérabilités critiques dans le cycle de traitement des requêtes de PHP peuvent permettre l’exécution de code à distance sans authentification. Passez à une version corrigée ou installez un correctif rétroporté par votre fournisseur pour les versions antérieures.

blog feature ai lilac
Blog

Transformez votre backlog de vulnérabilités en pull requests grâce à la remédiation agentique

Evo Remediation Agent est désormais disponible en aperçu ouvert et apporte la résolution automatisée des dépendances à Evo Agentic AppSec. Les équipes AppSec peuvent désormais lancer des campagnes de remédiation continues

AI Background min crop
Blog

L’IA fait surgir tous les risques que vous avez acceptés : sept enseignements du panel de sécurité de l’IA sans filtre

L’IA rend les attaques moins coûteuses et plus rapides, exposant des risques déjà présents dans les organisations. Quatre responsables de la sécurité expliquent pourquoi une défense à la vitesse des machines et une remédiation accélérée sont désormais indispensables.