Как стать автором
Обновить

Пакет Everything, охватывающий зависимостями все пакеты в репозитории NPM, случайно чуть не сломал NPM

Время на прочтение2 мин
Количество просмотров26K

В конце декабря 2023 года и в начале января 2024 года NPM-пакет Everything от разработчика PatrickJS, охватывающий зависимостями все пакеты в репозитории NPM, случайно чуть не сломал NPM под девизом «мы оживили демона». Сообщество разработчиков Node.js оперативно сделало веб-сайт про эту ситуацию и отработало с администрацией GitHub возможность скрытия этого проекта на ресурсе.

Полная техническая интерпретация инцидента, а также попытки борьбы с его последствиями, приведена в этих двух подробных публикациях от разработчиков сообщества Node.js:

Описание развития событий в краткой форме от OpenNET:

  • один из разработчиков JavaScript-пакетов провёл эксперимент с созданием и размещением в репозитории NPM пакета everything, который охватывает зависимостями все существующие пакеты в репозитории. Для реализации подобной возможности пакет everything связан прямыми зависимостями с пятью пакетами "@everything-registry/chunk-N", которые в свою очередь привязываются зависимостями к более 3000 пакетов "sub-chunk-N", в каждом из которых осуществляется привязка к 800 существующих пакетов в репозитории;

  • размещение пакета everything в NPM привело к двум интересным эффектам:

    1. Пакет everything стал своеобразным инструментом для совершения DoS-атак, так как попытка его установки приводит к загрузке миллионов размещённых в NPM пакетов и исчерпанию имеющегося дискового пространства или остановке выполнения сборочных процессов. По статистике NPM пакет был загружен около 250 раз, но никто не мешает добавить его в зависимости к другому пакету после взлома учётной записи разработчика для совершения диверсии. Кроме того, невольно атаке оказались подвержены некоторые службы и инструменты осуществляющие мониторинг и проверку новых пакетов, размещаемых в NPM.

    2. Публикация пакета everything фактически заблокировала возможность удаления любых пакетов в NPM, которые оказались в списке его зависимостей. Пакет из NPM может быть удалён автором только если он ещё не используется в зависимостях других пакетов, но после публикации everything зависимостями оказались охвачены все пакеты в репозитории;

  • примечательно, что удаление самого пакета everything также оказалось заблокированным, так как 9 лет назад в репозитории был размещён тестовый пакет everything-else, в котором была указана строка everything в списке зависимостей. Таким образом, пакет everything после публикации оказался в зависимостях у другого пакета.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 68: ↑68 и ↓0+68
Комментарии33

Другие новости

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
11 сентября
Митап по BigData от Честного ЗНАКа
Санкт-ПетербургОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн