Gestionnaire de paquets npm : les dépendances des paquets utilisées pour une attaque

Le développeur du module npm node-ipc.js a récemment ajouté un code malveillant dans ce module, qui supprime les fichiers lorsque le logiciel se croit sur un système russe ou biélorusse en raison d’une détermination de l’IP de géolocalisation. Le module est intégré en tant que dépendance à des frameworks populaires tels que Vue.js – ici en particulier @vue/cli (Vue.js Command Line Interface) – ce qui a permis au code malveillant de se propager sur de nombreux systèmes.

Les versions concernées sont restées en ligne pendant environ 24 heures et ont finalement été remplacées par des versions qui intègrent un autre module en tant que dépendance. Ce module s’appelle peacenotwar et se contente pour l’instant de créer un fichier texte nommé WITH-LOVE-FROM-AMERICA.txt sur le bureau ainsi que sur un lecteur OneDrive lié, au lieu de détruire des fichiers.

Le comportement du module node-ipc.js, respectivement de son développeur, est considéré comme une vulnérabilité critique (CVE-2022-23812, CVSS 9.8, risque critique). Les chercheurs de la société de sécurité informatique Snyk expliquent en détail les vulnérabilités et leur évolution dans un article de blog.

Les modifications remarquables ont commencé dès le 7 mars avec la version 10.1.1, dans laquelle le développeur a ajouté quelques bouts de code codés en Base64 qui devaient masquer la fonction du code du programme. Ce code décrit entre autres les répertoires ‘/’, ‘./’, ‘../’ ainsi que ‘../../’ dans lesquels les fichiers sont écrasés par l’emoji en forme de cœur, si la résolution géo-IP de l’adresse IP la situe en Biélorussie ou en Russie.

Selon Snyk, la version 10.1.2 n’a changé que le numéro de version, probablement pour que les gestionnaires de dépendances détectent et téléchargent automatiquement la nouvelle version. La version 10.1.3 a supprimé le code malveillant le jour suivant. En revanche, la version 11.0.0 est apparue, qui intègre à son tour le module peacenotwar et l’indique également dans le texte README.

À la fin de la semaine dernière, le mainteneur du projet node-ipc a publié la version 9.2.2, qui ajoute également l’utilisation de peacenotwar. En outre, la version 11.1.0 a supprimé les sorties de logs sur la console – les programmeurs utilisent souvent ces sorties pour le débogage manuel.

Pour résoudre le problème concret, Snyk propose de limiter les versions de node-ipc.js chargées en tant que dépendance en adaptant le fichier package.json. Comme node-ipc.js était concerné dans les versions 10.1.1 et 10.1.2 et que les versions 9.2.2 et 11.0.0 et suivantes intègrent le module indésirable peacenotwar, seules les versions antérieures à 9.2.2 ou les versions 10 jusqu’à 10.1.0 maximum devraient être utilisées.

Comme Vue.js CLI avait intégré la branche 9 de node-ipc.js, il était « vulnérable » à la version 9.2.2 infiltrée par peacenotwar. Les développeurs de Vue.js ont mis à disposition les versions corrigées 4.5.16 et 5.0.3 et plus récentes qui changent cela. Les utilisateurs de ces modules doivent s’assurer de déployer ces versions sans code malveillant.

Il s’agit d’un autre exemple d’attaque de la chaîne d’approvisionnement, dans lequel des failles de sécurité sont créées par la présence de vulnérabilités dans des composants logiciels fournis. En janvier de cette année, un développeur de paquets npm avait déjà rendu ses paquets inutilisables, perturbant ainsi les systèmes qui en dépendaient.