Essayez de créer un package NPM dépendant de tous les packages du référentiel

L'un des développeurs de packages JavaScript a expérimenté la création et le placement dans le référentiel NPM du package « tout », qui couvre tous les packages existants dans le référentiel avec leurs dépendances. Pour implémenter cette fonctionnalité, le package « tout » a des dépendances directes avec cinq packages « @everything-registry/chunk-N », qui à leur tour ont des dépendances sur plus de 3000 800 packages « sub-chunk-N », dont chacun se lie à XNUMX packages existants dans le référentiel.

Placer « tout » dans NPM a eu deux effets intéressants. Premièrement, le package « tout » est devenu une sorte d'outil pour effectuer des attaques DoS, car tenter de l'installer conduit au téléchargement de millions de packages hébergés dans NPM et à l'épuisement de l'espace disque disponible ou à l'arrêt de l'exécution des processus de construction. Selon les statistiques de NPM, le package a été téléchargé environ 250 fois, mais personne n'a pris la peine de l'ajouter en tant que dépendance à un autre package après que le compte du développeur ait été piraté pour commettre un sabotage. De plus, certains services et outils qui surveillent et vérifient les nouveaux packages hébergés par NPM ont été involontairement exposés à des attaques.

Deuxièmement, la publication du package « tout » a effectivement bloqué la possibilité de supprimer dans NPM tous les packages qui se retrouvaient dans sa liste de dépendances. Un package de NPM peut être supprimé par l'auteur uniquement s'il n'est pas déjà utilisé dans les dépendances d'autres packages, mais après la publication de « tout », les dépendances se sont avérées couvrir tous les packages du référentiel. Il est à noter que la suppression du package « tout » lui-même a également été bloquée, puisqu'il y a 9 ans, un package de test « tout-autre » a été publié dans le référentiel, qui incluait la chaîne « tout » dans la liste des dépendances. Ainsi, après publication, le package « tout » a fini par être dépendant d’un autre package.

Source: opennet.ru

Ajouter un commentaire