Dans le cadre d'une campagne coordonnée étalée sur un peu moins de deux semaines et impliquant 60 paquets npm malveillants, des pirates ont probablement réussi à s'emparer d'informations sensibles sur l'hôte et le réseau des systèmes des développeurs. Selon Socket, à l’origine de la découverte, ces paquets ont été distribués via trois comptes npm différents afin d'exécuter des scripts post-installation furtifs pendant les opérations « npm install ».

« Le script cible les systèmes Windows, macOS ou Linux et inclut des vérifications courantes de contournement de la sandbox, si bien que chaque poste de travail ou nœud d'intégration continue (CI) infecté est une source potentielle de reconnaissance précieuse », a déclaré Kirill Boychenko, chercheur chez Socket, dans un billet de blog. Les scripts collectaient les noms d'hôtes, les adresses IP internes et externes, les configurations DNS et les chemins d'accès aux répertoires des utilisateurs avant de transmettre ces informations à un webhook Discord contrôlé par l'acteur malveillant.

Une campagne de reconnaissance

L'extrait de code du payload partagé par Socket révèle que l'accent est mis sur la reconnaissance plutôt que sur les dommages immédiats. Le script vise essentiellement à relever les empreintes numériques de chaque système qui installe le paquet infecté. « En recueillant les adresses IP internes et externes, les serveurs DNS, les noms d'utilisateur et les chemins d'accès aux projets, l’acteur de la menace peut cartographier le réseau et identifier des cibles de grande valeur pour de futures campagnes », a ajouté M. Boychenko. Le script de la charge utile exploite des tactiques légères d'évasion du bac à sable pour éviter d'être détecté. Il a notamment recherché des indicateurs de virtualisation tels que « systemd-detect-virt » et des noms d'utilisateur connus tels que « sandbox ».

Le script semble identique dans les 60 paquets malveillants, ce qui laisse penser que la campagne est coordonnée. M. Boychenko alerte sur le fait que sur les serveurs à intégration continue (CI), la fuite a pu révéler certaines informations spécifiques comme les URL de registres privés et les chemins de construction internes, ce qui pourrait accélérer une attaque de la chaîne d'approvisionnement. Socket Security a indiqué qu'elle avait demandé la suppression de tous les paquets npm.

Suppression de comptes

Les trois premiers paquets malveillants, « e-learning-garena », « seatalk-rn-leave-calendar » et « coral-web-be », ont été publiés sous les comptes npm bbbb335656, cdsfdfafd1232436437 et sdsds656565, respectivement. Depuis, ces trois comptes ont publié chacun vingt paquets malveillants. Selon Socket, le premier paquet est apparu il y a onze jours, et le plus récent est apparu quelques heures seulement avant la divulgation, ce qui confirme que l'opération était toujours en cours à ce moment-là.

Cependant, une recherche sur npm au moment de la rédaction de cet article a révélé que les comptes ont probablement été retirés de npm. Aucun des paquets signalés dans la recherche de Socket n'a pu être retracé par la recherche non plus. Alors qu'ils étaient en ligne sur npm, les téléchargements combinés auraient dépassé les 3 000, ce qui, selon Socket, aurait fourni aux pirates une « carte extensive des réseaux de développeurs et d'entreprises » en vue d'intrusions futures.

De multiples abus de npm découverts en quelques jours

npm, le gestionnaire de paquets par défaut pour JavaScript, est devenu une cible privilégiée des attaquants du fait de son utilisation inégalée dans les flux de travail des développeurs et de sa capacité à servir de puissant vecteur pour les attaques de la chaîne d'approvisionnement à grande échelle. En début de semaine, Socket a également découvert une série de paquets npm malveillants, passés inaperçus dans npm depuis plus de deux ans, qui déploient des attaques contre des frameworks JavaScript particulièrement répandus, notamment React, Vue.js, Vite, Node.js et l'éditeur open-source Quill. Les paquets malveillants, qui se faisaient passer pour des plugins et des utilitaires inoffensifs, contenaient des charges utiles destructrices destinées à corrompre les données, à effacer les fichiers critiques et à faire planter les systèmes. Depuis leur mise en ligne, ils ont été téléchargés plus de 6 200 fois, échappant ainsi à la détection et se glissant dans des environnements de développement peu vigilants.

« L'acteur de la menace à l’origine de cette campagne, utilisant l'alias npm xuxingfeng avec un email d'enregistrement 1634389031@qq[.]com, a publié huit paquets destinés à causer des dommages étendus à travers l'écosystème JavaScript », a expliqué le chercheur de Socket, Kush Pandya, dans un billet de blog. « Le même compte a également publié plusieurs paquets légitimes et non malveillants qui fonctionnent comme annoncé ». Début mai, des pirates ont abusé de npm pour cibler des développeurs multilingues avec des paquets exploitant la technique dite du typosquattage, avec des infostealers et des capacités d’exécution de code à distance (RCE). M. Boychenko conseille d'appliquer une hygiène standard pour gérer les dépendances de npm. Il recommande d'utiliser des outils d'analyse des dépendances pour repérer les crochets de post-installation, les URL codées en dur et les archives tar anormalement petites. Il conseille aussi de renforcer le pipeline de développement avec des contrôles de sécurité automatisés.