Один из разработчиков JavaScript-пакетов решил провести эксперимент, добавив в репозиторий NPM-пакет под названием «everything», который включает в себя все существующие зависимости в этом репозитории. Для достижения этой цели пакет «everything» был связан с пятью пакетами «@everything-registry/chunk-N», каждый из которых, в свою очередь, зависит от более чем 3000 пакетов «sub-chunk-N». Каждый из этих пакетов, в свою очередь, зависит от 800 других существующих пакетов в репозитории.
Рассмотрим последствия размещения NPM-пакета.
Данный пакет стал эффективным инструментом для осуществления DoS-атак, так как его установка приводит к загрузке миллионов пакетов из NPM, что может вызвать исчерпание дискового пространства или прерывание сборочных процессов. Несмотря на то, что статистика NPM указывает на около 250 загрузок, существует потенциал добавления «everything» в зависимости других пакетов после взлома учетной записи разработчика с целью проведения диверсионных атак. Кроме того, некоторые службы и инструменты, осуществляющие мониторинг и проверку новых пакетов в NPM, также стали случайными жертвами этой атаки.
Также, публикация пакета «everything» фактически заблокировала возможность удаления любых пакетов в NPM, которые оказались в его зависимостях. Автор пакета может удалить его из NPM только в случае, если он не используется другими пакетами в качестве зависимости. Однако после публикации «everything» все пакеты в репозитории оказались в его зависимостях, что привело к блокировке возможности удаления. Даже удаление самого пакета «everything» оказалось невозможным, поскольку девять лет назад в репозитории был добавлен тестовый пакет «everything-else», включающий «everything» в свой список зависимостей. Таким образом, пакет «everything» после публикации оказался в зависимостях другого пакета, что сделало его удаление невозможным.
(Источник: https://www.opennet.ru/opennews/art.shtml?num=60392)