Угрозы

В npm скомпрометировали пакеты Mastra: вредоносная зависимость запускалась прямо при установке

Маша Даровская
By Маша Даровская , IT-редактор и автор
В npm скомпрометировали пакеты Mastra: вредоносная зависимость запускалась прямо при установке
Обложка © Anonhaven

17 июня 2026 года исследователи StepSecurity сообщили о компрометации npm-пакетов из пространства имён @mastra. По их данным, злоумышленник получил возможность публиковать обновления пакетов Mastra и добавил в них новую зависимость — easy-day-js.

Название выбрано не случайно. Оно похоже на dayjs — широко используемую JavaScript-библиотеку для работы с датами и временем. Такой прием называется тайпсквоттингом: вредоносный пакет получает имя, похожее на известный проект, и проходит поверхностную проверку за счет узнаваемости.

Атака затронула более 140 пакетов Mastra. В оценках разных исследовательских команд фигурирует число 144. StepSecurity указывает, что пакеты с совокупной аудиторией более 1,1 млн еженедельных загрузок оказались в зоне риска.

Mastra — не обычная небольшая библиотека. Это фреймворк для ИИ-приложений и агентов на TypeScript. Он используется в проектах, где часто есть ключи к языковым моделям, облачные токены, строки подключения к базам данных, ключи CI/CD и доступы к репозиториям.

Именно такие среды интересны атакующим. Если вредоносный код запускается на машине разработчика или в сборочном конвейере, он может увидеть переменные окружения, токены, ключи API и другие секреты. Для злоумышленника это короткий путь к инфраструктуре компании.

Mastra интегрируется с провайдерами моделей, базами данных, MCP-серверами, инструментами развертывания и наблюдаемости. Это повышает практическую ценность доступа к среде, где фреймворк устанавливают или обновляют.

Сначала в npm появился пакет easy-day-js@1.11.21. Он выглядел как рабочая копия dayjs и не содержал вредоносного кода. Такая «чистая» версия нужна для доверия: пакет имеет похожие метаданные, знакомое описание, похожий номер версии и выглядит безобидно при беглом просмотре.

Затем в пакеты Mastra добавили зависимость "easy-day-js": "^1.11.21". Символ ^ в npm означает, что при установке может быть выбрана более новая совместимая версия в рамках правил семантического версионирования. В нормальной разработке это помогает получать исправления без ручного обновления каждого проекта.

В этой атаке механизм сработал против пользователей. После публикации easy-day-js@1.11.22 свежие установки начали подтягивать уже вредоносную версию. В самих пакетах Mastra не нужно было каждый раз менять код: достаточно было один раз добавить зависимость с подходящим диапазоном версий.

Вредоносная версия easy-day-js содержала файл setup.cjs и скрипт postinstall. Такой скрипт выполняется при установке пакета. Для npm это штатный механизм: разработчики используют его для сборки, подготовки окружения или дополнительных действий после установки.

Здесь postinstall запускал обфусцированный загрузчик. Он отключал проверку TLS-сертификатов, записывал служебные файлы во временную директорию, обращался к серверу злоумышленников, скачивал второй этап и запускал его отдельным фоновым процессом. Затем загрузчик удалял собственный файл, уменьшая число следов на диске.

StepSecurity указывает на риск кражи переменных окружения и секретов, потому что Mastra часто ставят в средах с LLM-ключами, облачными доступами и токенами CI/CD. The Hacker News со ссылкой на JFrog, SafeDep и Socket пишет, что второй этап был кроссплатформенным инфостилером: он мог собирать данные браузеров, сведения из криптовалютных расширений, закрепляться в Windows, macOS и Linux и связываться с управляющим сервером.

Для компаний главный риск в том, что если вредоносный пакет запустился в CI/CD, под угрозой могли оказаться токены GitHub, npm-токены, ключи облачных провайдеров, секреты деплоя, доступы к базам и внутренним сервисам.

Пакет easy-day-js выглядел как почти точная копия известной библиотеки. У него были похожее название, версия, описание, лицензия и метаданные. При беглом просмотре зависимостей такая строка могла не вызвать тревоги, особенно в большом списке пакетов.

Дополнительный фактор — скорость. По данным StepSecurity, массовая публикация обновлений заняла около 88 минут. Пакеты выходили плотными группами, что указывает на автоматизацию. 

Третий фактор — доверие к пространству имён. Разработчики ставят @mastra/core или другие пакеты Mastra, а не easy-day-js напрямую. Вредоносный пакет приходит как зависимость внутри доверенного проекта, поэтому его проще пропустить.

Системы, где 17 июня устанавливали или обновляли пакеты @mastra, нужно считать потенциально скомпрометированными. В первую очередь стоит проверить lock-файлы, журнал установки пакетов и наличие easy-day-js@1.11.22.

Одного удаления зависимости недостаточно, если вредоносный код уже выполнялся. Нужно проверить рабочие станции и CI-раннеры, удалить следы загрузчика, изучить сетевые обращения к управляющим адресам, пересобрать временные сборочные среды из чистых образов и только после этого менять секреты.

Ротации требуют ключи LLM-провайдеров, облачные токены, GitHub-токены, npm-токены, SSH-ключи, ключи доступа к базам данных и секреты деплоя. Важно менять их после проверки на закрепление вредоносного кода, иначе новые секреты могут снова утечь.

Для будущей защиты стоит ограничить запуск скриптов установки в CI, использовать npm ci с проверенным lock-файлом, включать проверку происхождения пакетов, требовать подписи и аттестации для релизов, вводить задержку для новых версий зависимостей и контролировать исходящие соединения из сборочных сред.

Есть новость? Станьте автором.

Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.