Ce qui aurait pu commencer comme une simple farce a fini par avoir des répercussions plus importantes pour tous les auteurs de l’écosystème NPM. Installer "everything" aurait pu entraîner un manque d'espace de stockage et un ralentissement de votre ordinateur, mais la simple existence du package sur npmjs.com empêche les auteurs, sans rapport avec ce package, de dépublier leurs packages du plus grand registre de logiciels JavaScript au monde.Le registre NPM est un service qui permet aux développeurs de JavaScript de publier et de partager leurs modules de code avec la communauté. Il est utilisé par des millions de projets et de développeurs dans le monde entier. Cependant, il a récemment été victime d’un canular qui a perturbé son fonctionnement et causé des problèmes à de nombreux utilisateurs.
Le référentiel de packages JavaScript open source exploité par GitHub héberge plus de 2 millions de packages et est utilisé par plus de 17 millions de développeurs, selon le site Web NPM.
Le 29 décembre, un package nommé "everything" (tout) a été publié dans le registre, conçu pour installer tous les autres packages publics du registre. Cela a créé un réseau de dépendances à l'échelle du registre qui a effectivement désactivé la possibilité de dépublier des packages sur le site, car les packages dont dépendent d'autres packages ne peuvent pas être dépubliés.
Qu'est-ce qui se trouve derrière le package "everything" ?
En fait, le package "everything" ne contient que 5 sous-packages, publiés sous la portée "@everything-registry", répertoriés comme ses dépendances. Cependant, ces 5 packages parviennent progressivement à intégrer chaque package présent sur l'ensemble du registre NPM en tant que dépendance. Par exemple, "everything" récupère « @everything-registry/chunk-2 », ce qui peut en outre tenter d'extraire plusieurs autres packages du même auteur, tels que « @everything-registry/sub-chunk-1623 ».
Chacun de ces sous-packages (ou « morceaux » comme les appelle l'auteur) comprend finalement environ 800 projets npm comme dépendance.
Considérant que l'auteur de "everything" a publié plus de 3 000 paquets (morceaux) de ce type, chacun avec des centaines de dépendances, une seule commande « npm install everything » commencera à résoudre ce que l'on appelle les dépendances transitives et finira par télécharger des millions de paquets.
"everything" était accompagné d'un fichier demandant de ne pas l'installer
L'incident a déclenché des réponses de la part des développeurs incapables de dépublier leurs packages obsolètes ou expérimentaux, ainsi que des critiques de la part de certains qui considéraient cette cascade comme un abus du système NPM open source.
Les développeurs derrière "everything" ont déclaré qu’ils n’avaient pas anticipé ces conséquences et ont contacté NPM et GitHub pour résoudre le problème. Ironiquement, l’équipe n’a pas pu dépublier "everything" elle-même en raison d’un cercle de dépendances qui rendait essentiellement le package dépendant de lui-même.
« Nous avons juste pensé que ce serait drôle », a écrit Evan Boehs, un contributeur à "everything", en réponse à la question d'un autre utilisateur de GitHub sur l'objectif du projet. « Nous ne savions pas que tout cela allait arriver ».
Le package "everything" était accompagné d'un fichier « README » indiquant « S'il vous plaît, n'installez pas réellement ceci… ». Il comprenait également une image mème de Gary Oldman du film « Léon », représentant une scène dans laquelle le personnage d'Oldman crie de façon dramatique le mot « everyone » (tout le monde).
La section « à propos » du référentiel "everything" comprend également un lien vers le site Web « everything.npm.lol », qui affichait une animation représentant de nombreux packages en cours d'installation, suivie d'un mème du jeu vidéo « The Elder Scrolls V : Skyrim ».
Malgré l'avertissement de ne pas installer le package, le site de registre NPM indique que « everything » a été téléchargé des centaines de fois
Jossef Harush, responsable du groupe d'ingénierie de sécurité de la chaîne d'approvisionnement chez Checkmarx, a déclaré dans un billet de blog que l'installation de "everything" entraînerait probablement un déni de service (DoS). Harush qualifie également le projet de « campagne de trolls ».
[QUOTE]Les inconvénients de ces trolls
Imaginez que vous ayez fait une expérience, publié un package sur NPM et que vous souhaitiez maintenant supprimer votre package NPM. Vous ne pouvez pas le faire si d’autres packages l’utilisent. Le...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.