Mastra — популярный фреймворк на JavaScript и TypeScript для создания приложений и AI-агентов. Суммарное число еженедельных загрузок затронутых пакетов превышало 1,1 млн . 19 июня Microsoft с высокой степенью уверенности связала операцию с Sapphire Sleet .
Сценарий оказался опасным не из-за сложной уязвимости в самом фреймворке. Главным слабым местом стал скомпрометированный аккаунт с правами публикации во всём пространстве @mastra.
Сначала атакующие обманом завладели учетными данными легитимного сопровождающего Mastra. Скомпрометированный npm-аккаунт с именем ehindero имел права на публикацию пакетов во всём пространстве @mastra .
Используя полученный доступ, злоумышленники перепубликовали пакеты @mastra/* в течение примерно 88 минут. В некоторых отчетах говорится, что основная волна публикаций заняла всего 19 минут . Такая скорость указывает на автоматизированный скрипт, а не на ручную загрузку каждого пакета.
В каждую скомпрометированную версию добавили зависимость easy-day-js. Это typosquatting — название, рассчитанное на ошибку при чтении или проверке, — для легитимной библиотеки dayjs, широко используемой в экосистеме JavaScript . По названию этой зависимости кампанию стали называть «easy-day-js» .
Вредоносная логика запускалась через npm-скрипт postinstall. Поэтому достаточно было выполнить npm install затронутого пакета: вредоносная нагрузка срабатывала автоматически, ещё до запуска самого приложения .
Payload искал на рабочих станциях разработчиков и в системах сборки ключи криптокошельков, облачные учетные данные и секреты CI/CD . Кроме того, он отключал проверку TLS и загружал с управляемой атакующими инфраструктуры дополнительный модуль для кражи данных .
19 июня 2026 года Microsoft заявила, что с высокой степенью уверенности считает операцию делом Sapphire Sleet — северокорейского государственного актора, который в первую очередь атакует финансовый и криптовалютный секторы. В качестве основания компания указала инфраструктуру и тактики, техники и процедуры (TTP), совпадающие с ранее описанными операциями группировки .
Amazon Threat Intelligence также связала Sapphire Sleet с более ранними атаками на npm-пакеты, включая axios, debug, chalk и typo-crypto .
Атака на Mastra ускорила переход индустрии к модели, в которой права на публикацию выдаются на короткий срок и привязываются к конкретному рабочему процессу.
С 17 августа 2026 года новые API-ключи NuGet.org нельзя будет создавать на срок более 30 дней. Ранее максимальный срок составлял 365 дней . Все ключи, созданные до 17 августа, будут принудительно отключены 1 ноября 2026 года .
NuGet.org — репозиторий пакетов для экосистемы .NET, поэтому эта мера напрямую относится к сопровождающим NuGet-проектов, а не к уже описанным npm-пакетам Mastra. Логика изменения универсальна: украденный долгоживущий ключ оставляет атакующему длительное окно для публикации вредоносных версий доверенного пакета .
Microsoft рекомендует сопровождающим перейти на Trusted Publishing — механизм публикации, запущенный в сентябре 2025 года. Он использует OpenID Connect (OIDC) и заменяет постоянно хранящиеся API-ключи краткоживущими учетными данными .
Преимущества такого подхода:
В типичном сценарии workflow, например GitHub Actions, запрашивает криптографически подписанный OIDC-токен. NuGet.org сверяет его с заранее зарегистрированной политикой издателя и выдает временный одноразовый API-ключ, действующий только в рамках текущей сессии публикации .
Ответ не ограничивается NuGet:
npm login теперь выдает двухчасовые токены сессии .В совокупности эти меры перекрывают именно тот путь, который использовала Sapphire Sleet: один украденный и недостаточно защищенный токен сопровождающего с правами публикации во всём пространстве пакетов.
npm install --ignore-scripts или настройку ignore-scripts = true. Аналогичные параметры есть у pnpm и Yarn .Главный урок инцидента Mastra прост: доверие к имени пакета уже не гарантирует безопасность. Важны не только исходный код и репутация проекта, но и то, кто может публиковать обновления, как подтверждается эта личность и сколько времени сохраняются права на выпуск новой версии.