Après avoir inspecté manuellement certains de ces paquets, il est devenu évident qu'il s'agissait d'une attaque ciblée contre l'ensemble du champ d'application de @azure npm, par un attaquant qui a utilisé un script automatique pour créer des comptes et télécharger des paquets malveillants couvrant l'ensemble de ce champ d'application, ont observé les chercheurs en sécurité Andrey Polkovnychenko et Shachar Menashe dans un article publié le 23 mars sur le blog de JFrog. « Actuellement, la charge utile malveillante observée de ces paquets était destinée au vol de PII (Personally identifiable information). »
Pour npm, un outil en ligne de commande permettant d'interagir avec le registre npm, la portée sert à associer des paquets logiciels au nom d'un individu ou d'une organisation. Selon JFrog, les cybercriminels visent tous les développeurs npm qui utilisent l'un des paquets de la portée @azure. Les paquets destinés à être utilisés avec Microsoft Azure ajoutent le nom descriptif du paquet (par exemple, core-tracing) à l'identifiant scope @azure pour créer des identifiants de paquet tels que @azure/core-tracing. Cela facilite la recherche de paquets npm pertinents pour Azure et la gestion du code par les organisations.
En plus de la portée @azure, quelques paquets des portées suivantes ont également été ciblés : @azure-rest, @azure-tests, @azure-tools et @cadl-lang. Comme cet ensemble de paquets légitimes est téléchargé des dizaines de millions de fois chaque semaine, il y a de fortes chances que certains développeurs se laissent berner par l'attaque de typosquattage.
Dans l'attaque par typosquattage, le cybercriminel crée simplement un nouveau paquet (malveillant) portant le même nom qu'un paquet existant @azure scope, mais sans le nom scope. Le cybercriminel s'appuie sur le fait que certains développeurs peuvent omettre par erreur le préfixe @azure lors de l'installation d'un paquet. Par exemple, exécuter par erreur npm install core-tracing, au lieu de la commande correcte npm install @azure/core-tracing
Code JavaScript : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | const td = { p: package, c: __dirname, hd: os.homedir(), hn: os.hostname(), un: os.userInfo().username, dns: JSON.stringify(dns.getServers()), ip: JSON.stringify(gethttpips()), dirs: JSON.stringify(getFiles(["C:\\","D:\\","/","/home"])), } |
En plus de la méthode d’attaque par typosquattage, tous les paquets malveillants avaient des numéros de version extrêmement élevés (ex. 99.10.9), ce qui indique une attaque par confusion de dépendances. On peut supposer que le cybercriminel a essayé de cibler les développeurs et les machines fonctionnant sur les réseaux internes de Microsoft/Azure, en plus de cibler les utilisateurs réguliers de npm par typosquattage.
En raison de l'ampleur de l'attaque, il est évident que le cybercriminel a utilisé un script pour télécharger les paquets malveillants. Il a également tenté de dissimuler le fait que tous ces paquets malveillants ont été téléchargés par le même auteur, en créant un utilisateur unique (avec un nom généré de manière aléatoire) pour chaque paquet malveillant téléchargé.
Selon Polkovnychenko et Menashe, le cybercriminel espérait peut-être compromettre les comptes des ingénieurs travaillant sur le code Azure au sein de Microsoft, ainsi que des développeurs créant des logiciels sur le cloud de Redmond. Comme dit précédemment, il a également tenté d'éviter la détection en utilisant un script de téléchargement qui génère un nom d'utilisateur unique pour chacun des paquets téléchargés.
Cette tromperie particulière ne compte pas pour beaucoup, car il existe de nombreuses autres mesures qui sont également prises en compte lorsqu'on tente d'évaluer par programme si un paquet npm est malveillant. Le service Socket récent, par exemple, recherche les anomalies liées aux scripts d'installation, aux licences, à la documentation README, aux modifications importantes du code, à l'accès au réseau et aux versions inhabituelles, entre autres, pour repérer les paquets suspects. JFrog propose également un ensemble d'outils gratuits d'analyse de npm.
Selon Polkovnychenko et Menashe, l'attaque de la chaîne d'approvisionnement a permis de réaliser en moyenne environ 50 téléchargements pour chacun des 218 paquets malveillants pendant les deux jours où elle a fonctionné avant d'être interrompue. Cela représente potentiellement jusqu'à 10 900 victimes. Les deux chercheurs en sécurité affirment que la recrudescence des attaques de la chaîne d'approvisionnement des logiciels par le biais de npm, PyPI et d'autres registres de paquets logiciels exige des mesures de sécurité supplémentaires.
L’actualité de npm a également été animée ce mois par l’information selon laquelle, le développeur à l'origine du populaire paquet npm node-ipc a expédié ce mois-ci une nouvelle version pour protester contre l'invasion de l'Ukraine par la Russie. Mais les changements ont introduit un comportement indésirable qui cible les utilisateurs avec des adresses IP situées en Russie ou en Biélorussie et efface tous leurs fichiers lors de l'installation pour les remplacer par un émoji de cœur. Cet acte de sabotage suscite de nouvelles inquiétudes quant à la sécurité de la chaîne d'approvisionnement des logiciels et des logiciels libres.
« Par exemple, l'ajout d'un mécanisme CAPTCHA lors de la création d'un utilisateur npm ne permettrait pas aux attaquants de créer facilement une quantité arbitraire d'utilisateurs à partir desquels des paquets malveillants pourraient être téléchargés, ce qui faciliterait l'identification des attaques (et permettrait de bloquer les paquets en fonction de l'heuristique sur le compte de téléchargement) », suggèrent-ils. « En plus de cela, la nécessité d'un filtrage automatique des paquets dans le cadre d'un processus de curation de logiciels sécurisés, basé sur les techniques SAST [test de sécurité des applications statiques] ou DAST [test de sécurité des applications dynamiques] (ou de préférence - les deux), est probablement inévitable."
node-ipc est un module Node.js pour « la communication interprocessus locale et distante » avec un support complet pour Linux, Mac et Windows. Il supporte également toutes les formes de communication par socket, des sockets bas niveau d'Unix et de Windows aux sockets UDP et sécurisés TLS et TCP. Avec plus de 1,1 million de téléchargements hebdomadaires, node-ipc est un paquet important utilisé par des bibliothèques majeures comme Vue.js CLI. Cependant, le développe de node-ipc, Brandon Nozaki Miller, a saboté le paquet pour nuire aux utilisateurs se trouvant en Russie ou en Biélorussie, en vue de militer contre l'invasion russe en Ukraine.
Une copie simplifiée du code fournie par les chercheurs de Snyk montre que pour les utilisateurs basés en Russie ou en Biélorussie, le code réécrit le contenu de tous les fichiers présents sur un système avec un émoji de cœur, ce qui a pour effet de supprimer toutes les données sur un système. Mais ce n'est pas tout. Les chercheurs ont rapporté que comme les versions 9.2.2, 11.0.0 et les versions supérieures à 11.0.0 de node-ipc intègrent le module peacenotwar, les utilisateurs concernés ont vu des fichiers 'WITH-LOVE-FROM-AMERICA.txt' apparaître sur leur bureau.
Source : JFrog
Et vous ?
Quel est votre avis sur le sujet ?
Voir aussi :
Un paquet npm compromis par l'auteur efface les fichiers sur les ordinateurs russes et biélorusses lors de l'installation, pour protester contre l'invasion de l'Ukraine par la Russie
Les paquets npm malveillants font partie d'un "déferlement" de logiciels malveillants qui frappent les référentiels, la popularité des paquets en fait de parfaits vecteurs d'attaques
La bibliothèque npm populaire "coa" est détournée pour voler les mots de passe des utilisateurs, le paquet npm "rc" serait également compromis
Un dev open source aurait volontairement corrompu des bibliothèques largement utilisées, affectant des tonnes de projets. Il avait précédemment demandé à être rémunéré pour son travail