Невидимые вредоносные NPM-пакеты: просто добавь дефис

Инструмент CLI npm имеет очень удобный и эффективный механизм защиты от уязвимых пакетов – автоматическую проверку пакета при установке (с помощью npm install), которую можно запустить вручную с помощью команды npm audit. Однако исследователи из компании JFrog обнаружили , что этот механизм защиты с легкостью обходится при добавлении дефиса к версии пакета (например, 1.2.3-a), который обычно ставится для обозначения предварительной версии пакета. Происходит это из-за того, что конечной точке Bulk Advisory не удается получить рекомендации по безопасности для пакетов, версия которых содержит дефис (-), за которым следуют дополнительные символы.

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

В качестве примера исследователи привели пакет cruddl, который имел критическую уязвимость ( CVE-2022-36084 ) в одной из своих предыдущих версий. При установке этой версии CLI npm предупреждает разработчика, что пакет содержит критическую уязвимость.

Однако при попытке установить предварительную версию cruddl 2.0.0 CLI npm не выведет никакого предупреждения, хотя эта версия пакета также подвержена уязвимости.

В заключении отчета специалисты JFrog порекомендовали разработчикам и DevOps-инженерам никогда не устанавливать предварительные версии npm-пакетов, если они не уверены в том, что источник на 100% надежен. Стоит отметить, что даже в таком случае рекомендуется как можно скорее вернуться к непредварительной версии пакета.

Public Release.