"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.
Tout a commencé le 8 mars lorsque Miller, plus connu sous le pseudonyme RIAEvangelist, a publié deux paquets open source appelés "peacenotwar" et "oneday-test" sur npm et GitHub. Les paquets semblent avoir été créés à l'origine par Miller comme un moyen de protestation pacifique, car ils ajoutent principalement un "message de paix" sur le bureau de tout utilisateur qui installe les paquets. « Ce code sert d'exemple non destructeur de la raison pour laquelle le contrôle de vos modules Node.js est important. Il sert également de protestation non violente contre l'agression de la Russie qui menace le monde en ce moment », explique RIAEvangelist.
Mais le chaos s'est installé lorsque certaines versions npm de node-ipc ont été vues lançant une charge utile destructrice vers toutes les données et écrasant tous les fichiers des utilisateurs installant le paquet. Fait intéressant, le code malveillant lisait l'adresse IP externe du système et ne supprimait que les fichiers des utilisateurs basés en Russie et en Biélorussie. Le code malveillant présent dans node-ipc, en particulier dans le fichier "ssl-geospec.js", contient des chaînes codées en base64 et des techniques d'obscurcissement pour masquer son véritable objectif. Snyk, une startup spécialisée en cybersécurité, a suivi et documenté les faits.
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 avec des messages de 'paix' (comme le montre l'image ci-dessous).
Selon les chercheurs, cet acte représente un réel danger pour les utilisateurs de node-ipc basés dans ces régions. « À ce stade, un abus très clair et un incident critique de sécurité de la chaîne d'approvisionnement se produiront pour tout système sur lequel ce paquet npm sera appelé, s'il correspond à une géolocalisation de la Russie ou de la Biélorussie », écrit Liran Tal, directeur de la défense des développeurs chez Snyk dans un billet de blogue. En outre, cet acte de sabotage a déclenché une panique générale dans la communauté du framework JavaScript de développement front-end Vue.js, qui utilise également node-ipc comme dépendance.
Avant cet incident, Vue.js n'épinglait pas les versions de la dépendance node-ipc à une version sûre et était configuré pour récupérer les dernières versions mineures et correctives. En tant que tels, les utilisateurs de Vue.js CLI ont lancé un appel urgent aux mainteneurs du projet afin qu'ils épinglent la dépendance node-ipc à une version sûre, après que certains aient été surpris. Et, comme l'ont observé les chercheurs, Vue.js n'est pas le seul projet open source à être touché par ce sabotage. Ainsi, ils avertissent les développeurs et les autres responsables de projets de s'assurer qu'ils ne sont pas sur une version malveillante de node-ipc.
Les chercheurs de Snyk estiment que les versions 10.1.1 et 10.1.2 de node-ipc qui causent des dommages flagrants au système ont été retirées par npm dans les 24 heures suivant leur publication. Cependant, les versions 11.0.0 et supérieures de node-ipc restent disponibles sur npm et ils contiennent toujours le module "peacenotwar" qui crée les fichiers 'WITH-LOVE-FROM-AMERICA.txt' mentionnés ci-dessus sur le bureau. En tant que tel, si votre application est construite en utilisant la bibliothèque node-ipc, assurez-vous de définir la dépendance sur une version sûre telle que 9.2.1 (il s'avère que 9.2.2 n'est pas innocent non plus).
Il s'agit du deuxième incident majeur de protestation d'un développeur open source cette année, après le sabotage des paquets "colors" et "fakers" en janvier par leur développeur. Dans le cas de "colors", son développeur Marak Squires a suscité des réactions mitigées de la part de la communauté open source parce que sa manière de protester impliquait de casser des milliers d'applications en y introduisant des boucles infinies. Cependant, l'action de RIAEvangelist, qui maintient plus de 40 paquets sur npm, a suscité de vives critiques pour avoir dépassé la simple "protestation pacifique".
Il a déployé activement des charges utiles destructrices dans une bibliothèque populaire sans aucun avertissement aux utilisateurs honnêtes. Un utilisateur de GitHub a qualifié ce comportement d'"énorme dommage" pour la crédibilité de l'ensemble de la communauté open source. « Ce comportement est au-delà du f**** up. Bien sûr, la guerre est mauvaise, mais cela ne justifie pas ce comportement (par exemple, supprimer tous les fichiers pour les utilisateurs de Russie/Biélorussie et créer un fichier étrange dans le dossier du bureau). F*** you, allez en enfer. Vous venez de ruiner avec succès la communauté open source », a déclaré un autre.
« Tu es content maintenant @RIAEvangelist ? », a-t-il demandé. Pour d'autres, les développeurs devraient trouver d'autres terrains de protestation et arrêter de nuire à la réputation de l'open source. « Même si l'acte délibéré et dangereux du mainteneur RIAEvangelist sera perçu par certains comme un acte légitime de protestation. Comment cela se répercute-t-il sur la réputation future du mainteneur et sur sa place dans la communauté des développeurs ? », demande Tal de Snyk.
D'après Tal, cet incident de sécurité implique des actes destructeurs de corruption de fichiers sur le disque par un mainteneur et ses tentatives de cacher et de reformuler ce sabotage délibéré sous différentes formes. Bien qu'il s'agisse d'une attaque aux motivations contestataires, elle met en lumière un problème plus large auquel est confrontée la chaîne d'approvisionnement des logiciels : les dépendances transitives de votre code peuvent avoir un impact énorme sur votre sécurité.
Les chercheurs de Snyk avertissent que les développeurs doivent faire preuve de prudence avant d'utiliser node-ipc dans leurs applications, car il n'y a aucune garantie que les futures versions de cette bibliothèque ou de toute autre bibliothèque publiée par RIAEvangelist seront sûres. L'épinglage de vos dépendances à une version de confiance est l'un des moyens de protéger vos applications contre de telles attaques de la chaîne d'approvisionnement.
Sources : Snyk, discussions sur node-ipc (1, 2), les paquets npm maintenus par RIAEvangelist, le code malveillant
Et vous ?
Quel est votre avis sur le sujet ?
Que pensez-vous des agissements du mainteneur du paquet npm node-ipc ? Est-ce bien ?
Même s'il s'agit de son œuvre, a-t-il le droit de saboter un paquet dont dépendent des milliers de projets ?
Selon vous, quels impacts ces sabotages pourraient avoir sur la communauté open source et les logiciels libres ?
Voir aussi
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
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
Environ 26 % de toutes les menaces JavaScript malveillantes sont obfusquées, selon une étude d'Akamai
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