npub1lxgfm00kf6aj2yq4qdx2m6ssqmpdy3ylplcl3j0ry7x97eehkqusrz6qlq (npub1lxg…6qlq)
Один из разработчиков JavaScript-пакетов npub1dvetrm5jf0h70sd2hp8rq7euw57sp0kn82qufkhckr0mc6t38v3s454ltx (npub1dve…4ltx) эксперимент с созданием и размещением в репозитории NPM пакета "npub1kc0cafl390t0hev5as8kvk75sj4rutz3yg6w383kmmzcwpmtlpnsn2sfcd (npub1kc0…sfcd)", который охватывает зависимостями все существующие пакеты в репозитории. Для реализации подобной возможности пакет "everything" npub1ye5vf0wyqde4wn08cd8f4cneqraur42xlk8559xjtfyed7qz6hxqxy99mm (npub1ye5…99mm) прямыми зависимостями с пятью пакетами "@everything-registry/chunk-N", которые в свою очередь привязываются зависимостями к более 3000 пакетов "sub-chunk-N", в каждом из которых осуществляется привязка к 800 существующих пакетов в репозитории.
Размещение "everything" в NPM привело к двум интересным эффектам. Во-первых пакет "everything" стал своеобразным инструментом для совершения DoS-атак, так как попытка его установки приводит к загрузке миллионов размещённых в NPM пакетов и исчерпанию имеющегося дискового пространства или остановке выполнения сборочных процессов. По статистике NPM пакет был загружен около 250 раз, но никто не мешает добавить его в зависимости к другому пакету после взлома учётной записи разработчика для совершения диверсии. Кроме того, невольно атаке оказались подвержены некоторые службы и инструменты осуществляющие мониторинг и проверку новых пакетов, размещаемых в NPM.
Во-вторых публикация пакета "everything" фактически заблокировала возможность удаления любых пакетов в NPM, которые оказались в списке его зависимостей. Пакет из NPM может быть удалён автором только если он ещё не используется в зависимостях других пакетов, но после публикации "everything" зависимостями оказались охвачены все пакеты в репозитории. Примечательно, что удаление самого пакета
"everything" также оказалось заблокированным, так как 9 лет назад в репозитории был размещён тестовый пакет "npub16xdu8zefluj7w9u684udf4c5flv3q7l8u0l4mvgsy89p8cl0y2jqdhdduh (npub16xd…dduh)", в котором была указана строка "everything" в списке зависимостей. Таким образом,
пакет "everything" после публикации оказался в зависимостях у другого пакета.
Источник: npub1lxgfm00kf6aj2yq4qdx2m6ssqmpdy3ylplcl3j0ry7x97eehkqusrz6qlq (npub1lxg…6qlq)