Pendant les vacances, le registre des paquets npm a été inondé de plus de 3 000 paquets, dont un appelé « tout », et d’autres ont nommé une variante du mot.

Le package porte bien son nom car le téléchargement de « tout » intégrera progressivement chaque package npm jamais publié sur le npmjs.com registre sur votre ordinateur, ce qui pourrait le faire manquer de stockage. Mais ce n’est que la pointe de l’iceberg.

Si vous demandez: « Mais qui installerait « tout »?—- cela ignore un effet secondaire plus important de l’emballage.

Étant donné que ces plus de 3 000 packages parviennent à inclure chaque package npm sur le npmjs.com le registre étant leur dépendance, les auteurs de paquets npm qui ont déjà publié dans le registre npm seraient désormais incapables de supprimer leurs paquets à volonté, en raison de la politique de npm.

tout vous empêche de dépublier vos paquets
Ce qui a peut-être commencé comme une simple farce a fini par avoir des répercussions plus importantes pour tous les auteurs de l’écosystème du mnp.

L’installation de tout 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 aucun lien avec ce package, de dépublier leurs packages à partir du plus grand registre de logiciels JavaScript au monde.

Le paquet » tout « n’a que 5 sous-paquets, publiés sous la portée » @everything-registry », répertoriés comme ses dépendances, a observé Breachtrace .

« everything » et ses nombreuses dépendances récupèrent chaque package npm du registre

Ces 5 packages, cependant, parviennent progressivement à extraire chaque package présent sur l’ensemble du registre en tant que dépendance. Par exemple, « everything » extrait « @everything-registry / chunk-2 », ce qui peut 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) inclut finalement environ 800 projets npm comme dépendance.

plus de 3000 paquets qui tirent tout de la npmjs.com registre

Considérant que l’auteur de « tout » a publié plus de 3 000 paquets de ce type (morceaux), 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.

gdi2290 alias Patrick’s qui est derrière cette farce s’est excusé pour « toutes les difficultés que ce paquet a causées » et a contacté les administrateurs de npm pour remédier au problème.

« Imaginez que vous ayez fait une expérience, publié un package dans NPM et que vous souhaitiez maintenant supprimer votre package NPM. Vous ne pouvez pas le faire si d’autres packages l’utilisent », écrit Jossef Harush, Responsable de la sécurité de la chaîne d’approvisionnement logicielle chez Checkmarx sur le blog de l’entreprise.

Harush, qui a qualifié cette campagne d ‘ » enfer de dépendance », déclare en outre: « Le problème est que, puisque « tout » dépend de chaque paquet (y compris le vôtre), votre paquet est bloqué et un paquet inconnu vous empêche de le supprimer. »

Le chercheur a établi des comparaisons entre « tout » et le paquet » personne laissé pour compte  » publié en janvier 2023 qui tentait de réaliser à peu près le même coup.

le changement de politique du mnp suit l’incident du pavé gauche
Contrairement à certains registres de logiciels open source comme Maven Central, qui sont immuables et empêchent généralement les auteurs de supprimer leurs composants publiés, npm et PyPI ont traditionnellement permis aux développeurs de supprimer ou de « tirer » leurs versions à volonté.

Cependant, à la suite d’un incident survenu en 2016, qui a obligé l’auteur de left-pad à retirer son package npm en signe de protestation et à casser une grande partie d’Internet, npm a rendu plus difficile pour les auteurs de dépublier les packages.

Un de ces changements de politique impliquait de permettre aux auteurs de dépublier les paquets uniquement si aucun autre paquet du registre npm n’en dépend.

Ironiquement, cette politique a également empêché PatrickJS, l’auteur de « everything », de supprimer facilement ses paquets de farces, étant donné la longue chaîne de dépendances qu’il a configurée.

Breachtrace a observé, à partir de ce matin, alors que « tout » continue de vivre dans le registre, les milliers de paquets de portée » @everything-registry  » utilisés par celui-ci ont maintenant été rendus privés, résolvant potentiellement le problème.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *