Le développement logiciel repose largement sur la confiance, tout particulièrement lorsqu’il s’agit de composants open source. Les développeurs JavaScript viennent de nouveau de l’expérimenter après l’annonce de la suppression de 38 packages malveillants sur npm, le registre de gestion de package de Node.js. Entre le 19 et le 31 juillet, un utilisateur dénommé hacktask a publié une série de packages sur npm avec des noms similaires à ceux des packages npm existants, indique dans un billet le CTO du site, C.J. Silverio. Cela a été fait de façon délibérée pour collecter des données des utilisateurs, explique-t-il. 

Les développeurs utilisent les packages pour mettre en oeuvre des fonctions courantes sans devoir en réécrire entièrement le code. S’ils ne font pas attention et ajoutent les mauvais packages aux dépendances de leur code, ils se retrouvent avec du code malveillant dans leurs applications. Le compte hacktask a été fermé, tous les packages qui lui étaient associés ont été supprimés et l’adresse e-mail de l’utilisateur a été bannie de npm. Mais rien de cela ne l'empêchera éventuellement de recommencer. On ne peut rien faire pour empêcher les propriétaires de packages d’utiliser des noms similaires et, par ailleurs, des dénominations identiques ne signifient pas obligatoirement que les contenus sont malveillants. Dans le cas de hacktask, il ne s’agissait pas d’une coïncidence puisque les packages avaient les mêmes fonctionnalités que les originaux avec, en plus, une capacité à transférer des copies de données. Par exemple, les développeurs auraient pu faire la confusion entre cross-env, un package bien connu qui met en place des variables environnementale et crossenv, un package de hasktask qui envoyait les informations stockées dans les variables environnementales vers un serveur tiers. 

Si vous avez téléchargé et installé l'un des ces packages, vous devriez immédiatement le révoquer et remplacer tout identifiant se trouvant dans votre shell, avertit le référentiel npm.

Les développeurs doivent vérifier leur code

Ce type de variables, qui stockent des informations importantes comme les identifiants des comptes, ainsi que les clés et jetons d’authentification fournissant l’accès à d’autres applications, services ou API, constituent des données particulièrement recherchées par les pirates et les voleurs. Celles-ci sont par exemple stockées de cette façon sur des serveurs d’intégration continue tels que Jenkins, TravisCI, Team Foundation Server et Bamboo. On sait que le registre npm ne dispose pas de mécanismes de vérification pour empêcher l’ajout de packages malveillants. Lorsque les gestionnaires du référentiel en découvrent, ils les suppriment. Il est donc particulièrement important que la communauté reste vigilante et qu’elle signale les abus. C’est aux développeurs de vérifier le nom du package pour s’assurer qu’ils ont téléchargé le bon et de vérifier le code pour vérifier qu’il ne contient rien de suspect. De nombreuses entreprises recourent à des scanners de code source comme Black Duck Hub et Snyk pour débusquer les failles et les packages douteux. Snyk a ajouté à sa base de données la détection de tous les packages hacktask. 

Même si le billet posté sur le blog de npm indique que les éléments malveillants n’ont pas été largement téléchargés, les équipes de développement devraient immédiatement vérifier qu’elles n’en utilisent aucun venant du compte hacktask. Il ne faut pas se contenter de regarder les dépendances de chaque projet. Les équipes utilisant des projets tiers devraient aussi les vérifier pour être sûr qu’ils n’en contiennent pas non plus. Il s’avère qu’un certain nombre de projets sur GitHub utilisent le package malveillant crossenv. Ce qui signifie que ceux qui s'en servent auront sans le savoir mis en place du code destiné à collecter des données. En dehors des outils de scanning, il y a d’autres modes de vérification, via la ligne de commande, PowerShell ou Yarn si par hasard l’un des packages hacktask est utilisé.