Le populaire gestionnaire de package et de registre JavaScript NPM a été touché par un afflux de packages malveillants, dont les plus nocifs sont liés à du vol de données, de l'extraction de crypto, aux botnets ou encore à de l'exécution de code à distance. D'après la plateforme de détection automatisée de logiciels malveillants WhiteSource, 1 300 packages malveillants sur NPM au deuxième semestre 2021 ont été trouvés. Ils ont été identifiés par WhiteSource et notifiés à NPM et supprimés. Cette analyse intervient un peu plus de deux mois après que GitHub (filiale de Microsoft) - son propriétaire - ait poussé la double authentification pour les utilisateurs de registres NPM.

NPM est un gestionnaire de packages et un registre par défaut pour l'environnement d'exécution JavaScript largement utilisé Node.js. Il recense plus de 1,8 million de packages actifs, chaque package ayant un peu plus de 12 versions en moyenne. Un package est un ensemble pré-écrit de fonctions utiles qui peuvent être appelées dans un environnement de programmation sans avoir à écrire chaque ligne de code à partir de zéro. Un gestionnaire de packages est un activateur créé avec du code open source qui installe ou met à jour ces packages. 

Selon WhiteSource, NPM est devenu une cible constante des acteurs malveillants. Selon le fournisseur, 57% des attaques se produisent pendant trois jours de la semaine - vendredi, samedi et dimanche. La plupart d'entre elles (81,7 %) sont des attaques de « reconnaissance », consistant en des techniques qui impliquent que des adversaires collectent activement ou passivement des informations qui peuvent être utilisées pour soutenir le ciblage. 14 % des attaques sont conçues pour voler des informations telles que des informations d'identification et d'autres détails sensibles.

Leviers et techniques d'attaques

Certains des logiciels malveillants les plus récents détectés par WhiteSource incluent :

- Mos-sass-loader et css-resources-loader : des packages destinés à émuler les packages NPM populaires style-resource-loader et saas-loader, et conçus pour insérer du code source malveillant pour télécharger des voleurs d'informations tiers et également obtenir des connexions pour exécuter du code à distance (RCE) ;
- Circle-admin-web-app et browser-warning-ui : des packages contenant du code malveillant conçus pour télécharger des packages externes spécifiques au système d'exploitation contenant des logiciels malveillants pour lancer RCE ;
- Noopenpaint : un package de troll sans code malveillant qui lance quelques applications à tour de rôle et affiche "vous avez été piraté ;"
- @grubhubprod_cookbook : ce package exploite la confusion de dépendances pour cibler spécifiquement Grubhub, pour intercepter les données et les envoyer à un emplacement distant ;
- Azure-web-pubsub-express : un package de recherche de sécurité sans intention nuisible, pour collecter les données système et les détails de l'interface réseau et les envoyer à interactsh.com ;
- Reac1 et reect1 : un package de simulation d'exercice se faisant passer pour un package de recherche et tentant de diriger les requêtes http du système hôte vers webhook.com ;
- Mrg-message-broker : similaire à @grubhubprod_cookbook, utilise la confusion des dépendances pour voler des données d'environnement ;
- @sixt-web/api-client-sixt-v2-apps : un autre package de confusion de dépendances regroupant les données système lors de l'installation ;
- @maui-mf/app-auth : un package d'attaque potentiel SRRF (falsification de demande côté serveur) exécutant la découverte des rôles d'instance de service de métadonnées AWS et les envoyant à un faux domaine externe.

La majorité de ces attaques relèvent de quatre catégories de menaces nuisibles, notamment le cryptomining, le vol de données, les botnets et la recherche sur la sécurité. Les packages de recherche de sécurité sont ceux qui se présentent comme des programmes de recherche de sécurité, mais en réalité, contiennent l'exécution de code à distance (RCE) destiné à obtenir un accès complet à un hôte.

D'autres packages moins nocifs comprenaient des script kiddies et des hacks SEO. « Les script kiddies sont des packages qui ne causent pas de dommages ou ne collectent pas de données, mais impriment des messages dérangeants comme Vous avez été piraté », explique Maciej Mansfeld, chef de projet senior chez WhiteSource. « Quelques packages tentent également d'exploiter le fait que NPM affiche le README des packages sur son registre en ligne pour renforcer le référencement de leur présence en ligne. Nous avons vu des casinos en ligne et des sites Web érotiques essayer d'exploiter cela ».

La confusion de dépendances, une menace majeure

Le rapport recommande la prudence, en particulier concernant les attaques qui cherchent à exploiter la confusion de dépendances dans NPM, et le fait que la plupart des mauvais codes n'ont même pas besoin d'être téléchargés manuellement pour que l'attaque fonctionne. « Une attaque par confusion de dépendance est un type d'attaque de la chaîne d'approvisionnement qui se produit lorsqu'un gestionnaire de packages est manipulé pour fournir un code malveillant au lieu du code prévu », explique Maciej Mansfeld. « La méthode la plus connue pour exploiter cette vulnérabilité consiste à utiliser le mécanisme de hiérarchisation des gestionnaires de packages pour fournir les dernières versions ».

Dans de tels cas, lorsque les attaquants parviennent à trouver un nom de package de dépendance interne, ils peuvent alors créer un package public portant le même nom avec un numéro de version supérieur. Le package public malveillant sera alors préféré par le gestionnaire de packages et installé automatiquement à chaque appel de mise à jour.

Le zero trust comme planche de salut ?

Le rapport recommande d'adopter une politique zero trust sur le système, en ne mettant à jour que lorsque l'on est sûr du contenu d'un paquet. Mais aussi d'être conscient de l'environnement et de suivre régulièrement les changements, ou encore exécuter l'intégration continue (CI/CD) en phase isolée et de garder un œil sur le cycle de vie du développement logiciel. Des recommandations de bon sens, en somme, mais malheureusement loin d'être toujours suivies...

Selon Maciej Mansfeld, la surveillance des packages qui téléchargent des composants distants lors de l'installation et le suivi de tous les composants de système d'assistance aux opérations (OSS) utilisés, constituent également de saines bonnes pratiques à suivre pour les utilisateurs finaux de NPM.