Скомпрометированы 18 NPM-пакетов, насчитывающих более 2 миллиардов загрузок в неделю

В результате фишинга атакующим удалось перехватить учётные данные сопровождающих 18 популярных NPM-пакетов, в сумме загруженных более 2 миллиардов раз в неделю. Для скомпрометированных пакетов атакующие успели выпустить новые версии, содержащие вредоносный код. Это самая крупная атака на репозиторий NPM, которая затрагивает не только напрямую атакованные проекты, но сотни тысяч пакетов, зависимых от них.

Среди прочего, вредоносные обновления были выпущены для пакетов debug, chalk, ansi-styles, color-convert, wrap-ansi, supports-color и ansi-regex, имеющих более 200 млн загрузок за последнюю неделю. Отдельно выделяются пакеты chalk и debug, у которых имеется 129286 и 55289 зависимостей.

В ходе фишинга мэйнтейнерам от имени проекта NPM было отправлено email-уведомление о необходимости обновить параметры двухфакторной аутентификации. В письме было сказано, что пользователь не обновлял данные двухфакторной аутентификации более 12 месяцев и 10 сентября для предотвращения неавторизированного доступа все учётные данные с необновлёнными параметрами 2FA будут заблокированы.


Сообщения отправлялись с адреса “[email protected]” и вели на сайт npmjs.help, воспроизводящий сайт npmjs.com. Судя по всему, для введения пользователя в заблуждение использовались те же методы, что и для прошлых атак на PyPI, NPM и addons.mozilla.org, в которых для обхода защиты учётной записи при помощи двухфакторной аутентификации и создания ощущения работы с реальным каталогом NPM применялось прозрачное проксирование трафика с фишингового сайта на реальный сайт. Организовав работу npmjs.help как прокси для доступа к npmjs.com, атакующие контролировали весь трафик, включая активность на страницах ввода пароля входа и запроса второго фактора аутентификации.

В выпущенные атакующими обновления пакетов был подставлен вредоносный код, выполняемый на системах пользователей, работающих с сайтами или приложениями, использующими скомпрометированные версии пакетов. Вредоносная вставка для браузеров осуществляла перехват трафика и активности Web API, прикрепляя свои обработчики к функциям fetch и XMLHttpRequest, а также вмешивалась в работу типовых интерфейсов криптокошельков для скрытой подмены реквизитов получателя при переводе. Подмена осуществлялась на уровне модификации значений в запросах и ответах, незаметно для пользователя (в интерфейсе пользователя показывались корректные реквизиты). Поддерживались форматы транзакций Ethereum, Bitcoin, Solana, Tron, Litecoin и Bitcoin Cash.

В некоторых анонсах атаки на рассматриваемые NPM-пакеты также упоминается вредоносный код, выполняющий сбор и отправку ключей шифрования, паролей и токенов во время установки или запуска пакета. Детали по данной форме вредоносной вставки пока не приводятся.

Cкомпрометированные пакеты:

ПакетПиковое число загрузок в неделюЧисло зависимостейВерсия с вредоносным кодом
ansi-styles524 млн36956.2.2
debug465 млн552894.4.2
supports-color450 млн429810.2.1
chalk436 млн1292865.6.1
strip-ansi326 млн96687.1.1
color-convert313 млн36783.1.1
color-name312 млн32142.0.1
ansi-regex302 млн32386.2.1
wrap-ansi235 млн62759.0.1
is-arrayish90 млн15280.3.3
slice-ansi81.8 млн9037.1.1
error-ex64.7 млн15441.3.3
supports-hyperlinks31.5 млн7924.1.1
color-string31 млн4112.1.1
simple-swizzle29.5 млн1210.2.3
has-ansi19.7 млн4226.0.1
chalk-template4.6 млн1391.1.1
backslash298 тысяч650.2.1

Release. Ссылка here.