Зафиксирована атака на пользователей каталога NPM, в результате которой 20 февраля в репозитории NPM было размещено более 15 тысяч пакетов, в README-файлах которых присутствовали ссылки на фишинговые сайты или реферальные ссылки, за переходы по которым выплачиваются отчисления. В ходе анализа в пакетах было выявлено 190 уникальных фишинговых или рекламных ссылок, охватывающих 31 домен.
Имена пакетов выбирались для привлечения интереса обывателей, напирмер, “free-tiktok-followers” “free-xbox-codes”, “instagram-followers-free” и т.п. Расчёт делался на заполнение спамерскими пакетами списка недавних обновлений на главной странице NPM. В описании к пакетам приводились ссылки, обещавшие бесплатные раздачи, подарки, игровые читы, а также бесплатные услуги по накручиванию подписчиков и лайков в социальных сетях, таких как TikTok и Instagram. Это не первая подобная атака, в декабре в каталогах NuGet, NPM и PyPi была зафиксирована публикация 144 тысяч спамерских пакетов.
Содержимое пакетов было сгенерировано автоматически с использованием python-скрипта, который видимо по недосмотру был оставлен в пакетах и включал в себе рабочие учётные данные, использованные в ходе атаки. Пакеты были опубликованы под множеством различных учётных записей с использованием методов, усложняющих распутывание следов и оперативную идентификацию проблемных пакетов.
Кроме мошеннических действий в репозиториях NPM и PyPi также выявлено несколько попыток публикации вредоносных пакетов:
- В репозитории PyPI найден 451 вредоносный пакет, который маскировался под некоторые популярные библиотеки при помощи тайпсквотинга (назначение похожих имён, отличающихся отдельными символами, например, vper вместо vyper, bitcoinnlib вместо bitcoinlib, ccryptofeed вместо cryptofeed, ccxtt вместо ccxt, cryptocommpare вместо cryptocompare, seleium вместо selenium, pinstaller вместо pyinstaller и т.п.). Пакеты включали обфусцированный код для кражи криптовалюты, который определял наличие идентификаторов криптокошельков в буфере обмена и менял их на кошелёк злоумышленника (предполагается, что при совершении оплаты жертва не заметит, что перенесённый через буфер обмена номер кошелька отличается). Подмену осуществляло встраиваемое в браузер дополнение, которое выполнялось в контексте каждой просматриваемой web-страницы.
- В репозитории PyPI выявлена серия вредоносных HTTP-библиотек. Вредоносная активность была найдена в 41 пакете, имена которых выбирались с использованием методов тайпсквоттинга и напоминали популярные библиотеки (aio5, requestst, ulrlib, urllb, libhttps, piphttps, httpxv2 и т.п.). Начинка была стилизована под работающие HTTP-библиотеки или копировала код существующих библиотек, а в описании приводились утверждения о преимуществах и сравнения с легитимными HTTP-библиотеками. Вредоносная активность сводилась либо к загрузке вредоносного ПО на систему, либо к сбору и отправке конфиденциальных данных.
- В NPM выявлено 16 JavaScript-пакетов (speedte*, trova*, lagra), которые помимо заявленной функциональности (тестирование пропускной способности) также содержали код для майнинга криптовалюты без ведома пользователя.
- В NPM выявлен 691 вредоносный пакет. Большая часть проблемных пакетов притворялась проектами Yandex (yandex-logger-sentry, yandex-logger-qloud, yandex-sendsms и т.п.) и включала код для отправки конфиденциальной информации на внешние серверы. Предполагается, разместившие пакеты пытались добиться подстановки собственной зависимости при сборке проектов в Yandex (метод подмены внутренних зависимостей). В репозитории PyPI теми же исследователями найдено 49 пакетов (reqsystem, httpxfaster, aio6, gorilla2, httpsos, pohttp и т.п.) с обфусцированным вредоносным кодом, загружающим и запускающим исполняемый файл с внешнего сервера.