Experimenteu amb la creació d'un paquet NPM que depengui de tots els paquets del dipòsit

Un dels desenvolupadors de paquets JavaScript va experimentar amb la creació i col·locació al repositori NPM del paquet "tot", que cobreix tots els paquets existents al repositori amb dependències. Per implementar aquesta característica, el paquet "tot" té dependències directes amb cinc paquets "@everything-registry/part-N", que al seu torn tenen dependències de més de 3000 paquets "sub-part-N", cadascun dels quals s'uneix a 800 paquets existents al repositori.

Col·locar "tot" a NPM va tenir dos efectes interessants. En primer lloc, el paquet "tot" s'ha convertit en una mena d'eina per dur a terme atacs DoS, ja que un intent d'instal·lar-lo comporta la descàrrega de milions de paquets allotjats a NPM i esgota l'espai disponible en disc o atura l'execució de processos de compilació. Segons les estadístiques de NPM, el paquet es va descarregar unes 250 vegades, però ningú es molesta a afegir-lo com a dependència a un altre paquet després que el compte del desenvolupador fos piratejat per cometre sabotatge. A més, alguns serveis i eines que controlen i comproven nous paquets allotjats per NPM van ser exposats sense voler-ho a atacs.

En segon lloc, la publicació del paquet "tot" va bloquejar efectivament la possibilitat d'eliminar qualsevol paquet de NPM que acabés a la seva llista de dependències. L'autor només pot eliminar un paquet de NPM si encara no s'utilitza en les dependències d'altres paquets, però després de la publicació de "tot" les dependències van resultar que cobreixen tots els paquets del repositori. Cal destacar que també es va bloquejar l'eliminació del paquet "tot" en si, ja que fa 9 anys es va publicar al repositori un paquet de prova "tot la resta", que incloïa la cadena "tot" a la llista de dependències. Així, després de la publicació, el paquet "tot" va acabar depenent d'un altre paquet.

Font: opennet.ru

Afegeix comentari