Компрометация npm: более 140 пакетов Mastra заражены
Microsoft Threat Intelligence сообщила о significant supply chain attack в экосистеме npm, в ходе которой было скомпрометировано более 140 пакетов в пространствах mastra и @mastra. Инцидент стал возможен после захвата учетной записи сопровождающего, связанной с именем пользователя ehindero, что позволило злоумышленнику публиковать вредоносные версии пакетов и распространять их через доверенную инфраструктуру разработки.
Как работала атака
Злоумышленники использовали вредоносный релиз под названием easy-day-js — это typosquatting популярной библиотеки dayjs. Пакет распространялся как зависимость в отравленных версиях пакетов mastra, а затем автоматически попадал в среды, где выполнялись команды npm install или update.
Особую опасность атаки усиливал тот факт, что она была встроена в стандартный рабочий процесс разработчиков. После установки easy-day-js запускался postinstall-хук, который активировал обфусцированный скрипт-дроппер. Далее цепочка продолжалась по многоэтапной схеме: сначала выходила безобидная версия, а затем — скомпрометированная, что позволяло использовать CI/CD-pipeline и автоматические установки на затронутых системах.
Техническая схема заражения
Фаза выполнения атаки включала дроппер размером 4 572 байта. Он выполнял несколько вредоносных действий, в том числе отключал проверку сертификатов Transport Layer Security (TLS), чтобы упростить несанкционированную связь с сервером Command and Control (C2).
Затем дроппер загружал вторую стадию payload, которая запускалась как отсоединённый скрытый процесс. Вторичная полезная нагрузка представляла собой кроссплатформенный клиент Node.js с постоянным клиентом задач. Он:
- отправлял периодические маяки на C2;
- мог выполнять команды удалённо на зараженной системе;
- использовал рефлексивную инъекцию
.NET-assembly для выполнения кода в памяти без записи артефактов на диск.
Такой подход существенно повышал устойчивость к обнаружению и затруднял анализ инцидента средствами традиционной защиты.
Обфускация и методы уклонения
Для сокрытия ключевых деталей вредоносного кода использовалась обфускация с ротацией массивов строк и custom base64 decoders. Это позволяло скрывать от немедленного обнаружения важные элементы, включая вторичные адреса C2 и критические ссылки на модули Node.js.
В дальнейшем вредоносный скрипт мог выполнять exfiltration конфиденциальных данных, в том числе:
- информацию об установленных средствах защиты;
- extensions криптокошельков;
- history браузеров.
Передача данных осуществлялась по HTTPS с использованием пользовательских протоколов, что дополнительно маскировало активность под легитимный трафик.
Как была обнаружена атака
Инцидент выявили благодаря необычному поведению при публикации. Скомпрометированный аккаунт опубликовал новую версию пакета вскоре после ручной публикации, используя анонимную почтовую службу. Это отклонялось от стандартного CI/CD-процесса, принятого для пакетов mastra, и стало одним из ключевых индикаторов компрометации.
После заражения все зависимости, добавленные через последние версии, разрешались на вредоносную сборку. Таким образом, под угрозой оказались все среды, в которых после атаки выполнялись команды npm install или update.
Что означает этот инцидент
Microsoft делает вывод, что атака сочетала social engineering через захват учетной записи и сложные технические механизмы уклонения. Это вновь подчеркивает уязвимость supply chain в npm и критическую важность контроля за программными зависимостями.
Возможности обнаружения с помощью таких инструментов, как Microsoft Defender, необходимы для выявления подозрительной активности и сдерживания связанных с такими угрозами.
Случай с mastra показывает, что даже один скомпрометированный maintainer account способен поставить под угрозу сотни downstream-сборок, если процессы публикации и проверки пакетов не защищены должным образом.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.


