Криптовалютный червь: как десятки тысяч фейковых пакетов наводнили npm

С начала 2024 года реестр npm, ключевой компонент экосистемы JavaScript, подвергся массированной и продолжительной спам-атаке червеподобного типа. В рамках кампании, получившей название "IndonesianFoods", было опубликовано 46 484 поддельных пакета. Целью злоумышленников был не традиционный взлом или кража данных, а финансовая выгода через злоупотребление крипто-протоколом Tea, который вознаграждает разработчиков открытого кода.
Криптовалютный червь: как десятки тысяч фейковых пакетов наводнили npm
Изображение носит иллюстративный характер

Атаку первыми зафиксировали несколько исследовательских групп. Пол Маккарти, исследователь безопасности из SourceCodeRED, изначально обратил внимание на подозрительную активность. Позже компании Phylum (ныне часть Veracode) и Sonatype также сообщили о связанной кампании в апреле 2024 года. Детальный отчет, раскрывший масштаб и механизм атаки, был опубликован исследователями Крисом Стайку и Кираном Раджем из Endor Labs под руководством Хенрика Плейта.

Механизм распространения уникален своей простотой и эффективностью в обходе автоматических систем безопасности. Вредоносный код, содержащийся в файлах типа auto.js или publishScript.js, не активируется автоматически после установки пакета, как это делают многие зловреды. Для его запуска требуется ручное исполнение пользователем команды, например, node auto.js. Такой «спящий» режим позволяет коду оставаться незамеченным для большинства сканеров и песочниц, анализирующих поведение пакета при инсталляции.

При ручной активации скрипт запускает бесконечный цикл публикаций. Сначала он удаляет из файла package.json параметр "private": true", чтобы сделать пакет публичным. Затем генерирует случайное имя и версию для нового пакета, используя встроенный словарь, чтобы избежать дублирования. После этого он выполняет команду npm publish, загружая новый спам-пакет в реестр. Этот процесс повторяется непрерывно.

Скорость публикации ошеломляет: один новый пакет загружался каждые 7-10 секунд. Это соответствует производительности около 12 пакетов в минуту, 720 в час и почти 17 000 в сутки. Кроме того, все спам-пакеты ссылались друг на друга в качестве зависимостей, создавая плотную сеть. При попытке установить один такой пакет, менеджер зависимостей начинал вытягивать всю цепочку, создавая огромную нагрузку на пропускную способность инфраструктуры npm.

Основной мотивацией злоумышленников является крипто-фарминг. Они стремились злоупотребить протоколом Tea — децентрализованной системой, которая награждает разработчиков токенами TEA за их вклад в проекты с открытым исходным кодом. Публикуя десятки тысяч взаимосвязанных пакетов, атакующие искусственно завышали свой «показатель влияния» в системе, рассчитывая на получение вознаграждения.

Доказательства этой схемы были обнаружены непосредственно в коде. Некоторые пакеты, контролируемые злоумышленниками, такие как arts-dao и gula-dao, содержали файл tea.yaml. В этом конфигурационном файле были прописаны пять различных аккаунтов в системе Tea, на которые, предположительно, должны были начисляться токены.

Несмотря на масштаб, атака не отличалась технической сложностью в плане взлома. Её сила заключалась в автоматизации и объеме. Поддельные пакеты маскировались под проекты Next.js и использовали две основные схемы именования. Первая, давшая название кампании, основывалась на индонезийских именах и названиях продуктов. Вторая использовала случайные английские слова, например, able_crocodile-notthedevs.

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

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


Новое на сайте

19521Банковский троян VENON на Rust атакует Бразилию с помощью девяти техник обхода защиты 19520Бонобо агрессивны не меньше шимпанзе, но всё решают самки 19519Почему 600-килограммовый зонд NASA падает на Землю из-за солнечной активности? 19518«Липовый календарь»: как расписание превращает работников в расходный материал 19517Вредоносные Rust-пакеты и ИИ-бот крадут секреты разработчиков через CI/CD-пайплайны 19516Как хакеры за 72 часа превратили npm-пакет в ключ от целого облака AWS 19515Как WebDAV-диск и поддельная капча помогают обойти антивирус? 19514Могут ли простые числа скрываться внутри чёрных дыр? 19513Метеорит пробил крышу дома в Германии — откуда взялся огненный шар над Европой? 19512Уязвимости LeakyLooker в Google Looker Studio открывали доступ к чужим базам данных 19511Почему тысячи серверов оказываются открытой дверью для хакеров, хотя могли бы ею не быть? 19510Как исследователи за четыре минуты заставили ИИ-браузер Perplexity Comet попасться на... 19509Может ли женщина без влагалища и шейки матки зачать ребёнка естественным путём? 19508Зачем учёные из Вены создали QR-код, который невозможно увидеть без электронного... 19507Девять уязвимостей CrackArmor позволяют получить root-доступ через модуль безопасности...
Ссылка