Скомпрометированы 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 будут заблокированы.

Сообщения отправлялись с адреса «support@npmjs.help» и вели на сайт 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-styles 524 млн 3695 6.2.2
debug 465 млн 55289 4.4.2
supports-color 450 млн 4298 10.2.1
chalk 436 млн 129286 5.6.1
strip-ansi 326 млн 9668 7.1.1
color-convert 313 млн 3678 3.1.1
color-name 312 млн 3214 2.0.1
ansi-regex 302 млн 3238 6.2.1
wrap-ansi 235 млн 6275 9.0.1
is-arrayish 90 млн 1528 0.3.3
slice-ansi 81.8 млн 903 7.1.1
error-ex 64.7 млн 1544 1.3.3
supports-hyperlinks 31.5 млн 792 4.1.1
color-string 31 млн 411 2.1.1
simple-swizzle 29.5 млн 121 0.2.3
has-ansi 19.7 млн 422 6.0.1
chalk-template 4.6 млн 139 1.1.1
backslash 298 тысяч 65 0.2.1

Источник: http://www.opennet.ru/opennews/art.shtml?num=63845