Experimente con la creación de un paquete NPM que dependa de todos los paquetes del repositorio.

Uno de los desarrolladores de paquetes JavaScript experimentó creando y colocando en el repositorio de NPM el paquete "todo", que cubre todos los paquetes existentes en el repositorio con dependencias. Para implementar esta característica, el paquete “todo” tiene dependencias directas con cinco paquetes “@everything-registry/chunk-N”, que a su vez tienen dependencias en más de 3000 paquetes “sub-chunk-N”, cada uno de los cuales se une a 800 paquetes existentes en el repositorio.

Colocar "todo" en la NGP tuvo dos efectos interesantes. En primer lugar, el paquete "todo" se ha convertido en una especie de herramienta para realizar ataques DoS, ya que un intento de instalarlo provoca la descarga de millones de paquetes alojados en NPM y agota el espacio disponible en el disco o detiene la ejecución de los procesos de compilación. Según las estadísticas de NPM, el paquete se descargó unas 250 veces, pero nadie se molestó en agregarlo como una dependencia a otro paquete después de que la cuenta del desarrollador fue pirateada para cometer sabotaje. Además, algunos servicios y herramientas que monitorean y verifican nuevos paquetes alojados por NPM quedaron expuestos involuntariamente a ataques.

En segundo lugar, la publicación del paquete "todo" bloqueó efectivamente la capacidad de eliminar cualquier paquete en NPM que terminara en su lista de dependencias. El autor puede eliminar un paquete de NPM solo si aún no se utiliza en las dependencias de otros paquetes, pero después de la publicación de "todo", las dependencias resultaron cubrir todos los paquetes en el repositorio. Cabe destacar que la eliminación del paquete "todo" también fue bloqueada, ya que hace 9 años se publicó en el repositorio un paquete de prueba "todo lo demás", que incluía la cadena "todo" en la lista de dependencias. Así, tras su publicación, el paquete “todo” acabó dependiendo de otro paquete.

Fuente: opennet.ru

Añadir un comentario