Expérience de création d'un paquet NPM, dépendant de tous les paquets dans le dépôt

Un des développeurs de packages JavaScript a mené une expérience en créant et en publiant dans le dépôt NPM un package « everything », qui couvre toutes les dépendances de tous les packages existants dans le dépôt. Pour réaliser une telle possibilité, le package « everything » est lié par des dépendances directes à cinq packages « @everything-registry/chunk-N », qui à leur tour se lient par des dépendances à plus de 3000 packages « sub-chunk-N », chacun étant lié à 800 packages existants dans le dépôt.

La mise en ligne de « everything » sur NPM a conduit à deux effets intéressants. Tout d'abord, le package « everything » est devenu un outil pour mener des attaques DoS, car essayer de l'installer entraîne le téléchargement de millions de packages hébergés sur NPM, ce qui peut épuiser l'espace disque disponible ou arrêter les processus de compilation. Selon les statistiques, le package NPM a été téléchargé environ 250 fois, mais rien n'empêche de l'ajouter en dépendance à un autre package après le piratage du compte du développeur pour réaliser une diversion. De plus, involontairement, certaines services et outils de surveillance et de vérification des nouveaux packages publiés sur NPM ont été affectés par cette attaque.

Deuxièmement, la publication du package « everything » a en réalité bloqué la possibilité de supprimer tout package dans NPM qui s'est retrouvé sur la liste de ses dépendances. Un package dans NPM ne peut être supprimé par son auteur que s'il n'est pas utilisé dans les dépendances d'autres packages, mais après la publication de « everything », toutes les dépendances ont couvert tous les packages dans le dépôt. Il est intéressant de noter que la suppression du package lui-même « everything » a également été bloquée, car il y a 9 ans, un package test « everything-else » a été publié dans le dépôt, dans lequel la ligne « everything » était indiquée dans la liste des dépendances. Ainsi, après sa publication, le package « everything » s'est retrouvé dans les dépendances d'un autre package.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster