Найти в Дзене

Пользователи NPM еженедельно загружают 2,1 млрд устаревших пакетов, сообщают исследователи

Оглавление

Пользователи NPM загружают устаревшие пакеты примерно 2,1 миллиарда раза в неделю, согласно статистическому анализу 50 000 наиболее загружаемых пакетов в реестре.

Устаревшие, архивные и "заброшенные" пакеты NPM могут содержать непропатченные и/или незарегистрированные уязвимости, представляющие опасность для зависящих от них проектов, предупреждают исследователи из Aqua Security's Team Nautilus, опубликовавшие свои выводы в блоге в воскресенье.

Разработчики JavaScript, полагающиеся на пакеты NPM с открытым исходным кодом в своих проектах, могут не знать о том, насколько зависимости от устаревших пакетов влияют на их работу, заявила команда Nautilus.

В связи с проведенным исследованием компания Aqua Nautilus выпустила инструмент с открытым исходным кодом, который может помочь разработчикам выявить устаревшие зависимости в их проектах.

Издатели NPM могут архивировать пакеты вместо того, чтобы устранять недостатки безопасности

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

Исследователи Aqua Nautilus начали свой анализ после того, как обнаружили, что один из сопровождающих открытого ПО ответил на сообщение об обнаруженной Nautilus уязвимости тем, что в тот же день заархивировал уязвимый репозиторий.

По словам исследователей, архивируя репозиторий, не устранив недостаток безопасности и не присвоив ему CVE, владелец оставляет разработчиков зависимых проектов в неведении относительно рисков.

Исследователь Aqua Security Илай Голдман, член команды Team Nautilus, рассказал о том, как уязвимости в цепочке поставщиков открытых исходных кодов могут открыть двери для крупных кибератак.

"Ярким примером этого может служить уязвимость Log4Shell, которой нет в npm, но она подчеркивает проблему использования пакета, который имеет уязвимость и должен рассматриваться как устаревший", — сказал Голдман в письме SC Media.

Учитывая эти потенциальные последствия, команда Aqua Nautilus попыталась лучше оценить масштабы распространения неподдерживаемых пакетов NPM в реестре.

Более 20 % пакетов NPM из 50 тыс. лучших могут иметь пробелы в обслуживании

Статистический анализ устаревания пакетов NPM включает в себя как "официально устаревшие" пакеты, так и другие пакеты с неопределенным статусом поддержки из-за того, что в качестве исходного коммита был указан архивный или недоступный репозиторий.

Принимая во внимание как устаревшие пакеты, так и активные пакеты, имеющие прямую зависимость от устаревших проектов, исследователи обнаружили, что около 4 100 (8,2%) из 50 000 наиболее загружаемых пакетов NPM попали в категорию "официального" устаревания.

Однако добавление архивных репозиториев к определению "устаревших" увеличило число пакетов, затронутых устареванием и устаревшими зависимостями, до 6 400 (12,8 %).

"Осиротевшие" пакеты с недоступными или несуществующими исправлениями в репозитории также могут считаться устаревшими из-за снижения возможности отслеживать статус сопровождения, просматривать историю исправлений и сообщать о проблемах, говорят исследователи.

Если расширить определение устаревания и включить в него пакеты NPM без активно поддерживаемых репозиториев, то более 20 % из 50 000 лучших пакетов NPM можно считать устаревшими.
Если расширить определение устаревания и включить в него пакеты NPM без активно поддерживаемых репозиториев, то более 20 % из 50 000 лучших пакетов NPM можно считать устаревшими.

Если включить пакеты со связанными репозиториями, которые на GitHub отображаются как недоступные (ошибка 404), то, согласно анализу Nautilus, уровень обесценивания увеличивается до 15 % (7 500 пакетов). Если включить пакеты, не имеющие ни одного связанного репозитория, то окончательное число устаревших пакетов составит 10 600, или 21,2 % от 50 000 лучших.

Команда Nautilus подсчитала, что при таком более широком понимании устаревания пакетов, еженедельно в реестре NPM происходит около 2,1 миллиарда загрузок устаревших пакетов.

Проблема становится еще более серьезной, если учесть широкую сеть зависимостей, которые создают некоторые из этих пакетов, например, официально устаревший пакет "request", который имеет более 55 000 прямых зависимостей.

Повлияет ли на мой проект устаревание пакетов NPM?

Разработчики могут воспользоваться бесплатным инструментом Dependency Deprecation Checker, опубликованным компанией Aqua Security, чтобы начать выявлять устаревшие пакеты среди своих зависимостей. Инструмент позволяет пользователям устанавливать критерии устаревания в соответствии со своими предпочтениями, например, исключать из поиска пакеты с архивными репозиториями.

Исследователи отмечают, что инструмент является пробным вариантом и поэтому не является полностью всеобъемлющим, но может дать разработчикам представление о статусе их устаревания.

Aqua Security рекомендовала организациям разработать протоколы устаревания, в которых описаны критерии, по которым пакет считается устаревшим. Команда также призывает организации всегда обновлять или заменять устаревшие зависимости, когда это возможно.

"Очень важно признать, что устаревшая зависимость может служить вектором атаки. В этом контексте GitHub мог бы усовершенствовать свои механизмы оповещения пользователей", — предложил Голдман. "Хотя npm отображает сообщения об устаревании, их можно расширить, включив в них предупреждения, когда пакет полагается на устаревшую зависимость".

"Дальнейшая интеграция с GitHub для определения того, был ли репозиторий заархивирован, с последующим оповещением пользователя, могла бы значительно повысить осведомленность разработчиков об использовании необслуживаемых пакетов", — заключил Голдман.

Сложная ситуация, создаваемая зависимостями NPM, также была отмечена в начале этого месяца, когда пакет под названием "everything", создающий зависимости со всеми другими публичными пакетами, оставил разработчиков в реестре, неспособных распубликовать свои устаревшие проекты.

Источник: NPM registry users download 2.1B deprecated packages weekly, researchers say