Un chercheur en sécurité et administrateur système a développé un outil qui peut aider les utilisateurs à vérifier les incompatibilités manifestes dans les packages du registre de logiciels JavaScript NPM.
La semaine dernière, un ancien responsable de l’ingénierie chez GitHub et NPM, Darcy Clarke, a mis en garde contre les problèmes de « confusion manifeste » qui pourraient introduire le risque que des logiciels malveillants se cachent dans des dépendances ou exécutent des scripts lors de l’installation.
« Confusion manifeste » fait référence à un problème de sécurité dans le NPM (Node Package Manager), un gestionnaire de packages pour le langage de programmation JavaScript et celui par défaut pour l’environnement Node.js.
Le problème est lié aux informations incohérentes entre les données manifestes d’un package telles qu’elles sont affichées dans le registre NPM et les données présentes dans le fichier ‘package.json’ du package publié.
Un acteur malveillant pourrait manipuler les données manifestes d’un nouveau package, en éliminant certains scripts ou dépendances afin qu’ils n’apparaissent pas dans le registre NPM.
Cependant, ces scripts ou dépendances seraient toujours présents dans le fichier package.json et seraient exécutés lors de l’installation du package, sans que l’utilisateur en soit conscient.
Ce problème expose potentiellement les développeurs à des risques tels que l’empoisonnement du cache, l’installation de dépendances inconnues, l’exécution de scripts inconnus et peut-être même des attaques de rétrogradation.
Étant donné que GitHub n’a pas encore résolu le problème et que l’on ne sait pas ce que la plate-forme prévoit de faire, Clarke a suggéré que les mainteneurs de paquets suppriment la dépendance aux données manifestes et utilisent un proxy de registre pour effectuer des vérifications de cohérence des données.
Vérificateur de confusion manifeste
Jusqu’à ce qu’une solution soit mise en œuvre, l’administrateur système Felix Pankratz a publié un outil basé sur Python qui peut aider les développeurs de logiciels à vérifier les packages NPM pour les incohérences.
Pour utiliser l’outil, installez d’abord le gestionnaire de packages PIP Python avec « pip install -r requirements.txt ».
Pour inspecter un seul package, transmettez le nom du package au script en tant que premier argument. Par exemple:
$ ./npm-manifest-check.py darcyclarke-manifest-pkg
La sortie mettra en évidence toute incompatibilité dans la version, les dépendances, les scripts et le nom du package entre le manifeste et le fichier package.json réel.
Pour un package sans incompatibilité, la sortie devrait ressembler à ceci :
$ ./npm-manifest-check.py couleur
Aucune discordance détectée pour la couleur.
Pour inspecter plusieurs packages, les développeurs peuvent les ajouter à un fichier ‘packages. list’ (un package par ligne) et utilisez le script wrapper ‘check_packages.sh’ pour les vérifier. L’outil signalera toute non-concordance trouvée sur chacun des packages cochés.
Pour comprendre tous les aspects de l’utilisation de l’outil de Pankratz, vérifiez la commande d’aide avec :
./npm-manifest-check.py -h
La confusion manifeste n’est pas un problème répandu ou critique dans la communauté NMP en ce moment, mais l’ignorer n’est pas la voie sûre car les acteurs de la menace pourraient commencer à l’utiliser pour des attaques de la chaîne d’approvisionnement.