Что случилось
17 июня 2026 года один из самых популярных опенсорсных фреймворков для сборки ИИ-агентов — Mastra (TypeScript) — стал жертвой атаки на цепочку поставок. Злоумышленники получили контроль над npm-аккаунтом ehindero, у которого были права публикации на весь scope @mastra. По первым разборам (Snyk) это был «уснувший» аккаунт бывшего контрибьютора Mastra, у которого так и не отозвали права публикации; позже в репортинге со ссылкой на инцидент-отчёт появилась другая версия — что аккаунт принадлежит действующему мейнтейнеру, которого скомпрометировали через социнженерию (сообщение в LinkedIn, звонок, переход по подозрительной ссылке). Так или иначе, через этот аккаунт злоумышленники меньше чем за полтора часа (по данным StepSecurity — окно примерно с 01:12 до 02:39 UTC, около 87 минут) перезалили больше 140 пакетов.
В каждый пакет добавили одну «безобидную» зависимость — easy-day-js, тайпсквот легитимной библиотеки дат dayjs (у оригинала 57+ млн загрузок в неделю). Подделка выдавала себя за dayjs: копировала нумерацию версий, имя автора (iamkun) и ссылку на репозиторий — хотя публиковалась со стороннего аккаунта (sergey2016@tutamail.com).
Дальше — классика npm-зловредов. При обычном npm install срабатывал postinstall-хук и запускал обфусцированный дроппер (по разбору Microsoft — 4572 байта). Он отключал проверку TLS-сертификата (NODE_TLS_REJECT_UNAUTHORIZED=0), стучался на C2-сервер атакующих, скачивал вторую стадию (Node.js-имплант), запускал её отдельным скрытым процессом и самоудалялся, чтобы замести следы.
Главная цель — деньги. Имплант проверял жёстко зашитый список из 166 ID браузерных расширений крипто-кошельков (MetaMask, Phantom, Coinbase Wallet, Binance Wallet, TronLink и др.), выгребал данные браузеров (Chrome, Edge, Brave), а заодно и переменные окружения — то есть LLM-ключи и облачные креды, которых в проектах на Mastra обычно хватает.
Microsoft с высокой уверенностью приписала атаку северокорейской группе Sapphire Sleet (она же BlueNoroff, UNC1069, STARDUST CHOLLIMA, Alluring Pisces, CageyChameleon, CryptoCore) — финансово мотивированному актору, специализирующемуся на краже криптовалюты.
Примечание по цифрам: разные издания насчитали от 141 до 145 пакетов; Microsoft в отчёте использует формулировку «140+». Точное число зависит от методики подсчёта.
Почему это важно
Это не «ещё один зловредный npm-пакет», а показательный кейс сразу по нескольким причинам:
- Ударили по инфраструктуре ИИ-агентов. Mastra — не нишевая библиотека: суммарно затронутые пакеты качают, по оценке StepSecurity, больше 1,1 млн раз в неделю. Под удар попали разработчики, которые вообще не открывали ничей вредоносный сайт — они просто обновили зависимости.
- Дыра была не в коде, а в правах доступа. Скомпрометировали не сам проект, а аккаунт мейнтейнера с правами публикации на весь scope. Забытый ли это доступ бывшего контрибьютора или взломанный через социнженерию аккаунт действующего — вывод один: один такой аккаунт = компромисс всей экосистемы пакетов.
postinstallпо-прежнему работает. Скрипт исполняется автоматически при установке, до того как вы запустите хоть строчку своего кода. Для CI/CD и локальных машин это мгновенное RCE.- Северокорейские группы целятся именно в разработчиков. Sapphire Sleet/BlueNoroff давно охотятся за криптой и работают через социнженерию против инженеров (та же группа фигурировала в других supply-chain-инцидентах). Разработчик с крипто-кошельком в браузере — идеальная мишень.
Что это значит для вайб-кодинга
Вайб-кодинг держится на доверии: агент предлагает поставить пакет или MCP-сервер — и его ставят не глядя. Этот инцидент — прямое напоминание, что установка чужого кода это исполнение чужого кода.
Практические выводы:
- Если 17 июня вы ставили или обновляли что-то из
@mastra— считайте окружение скомпрометированным. Ротируйте LLM- и облачные ключи, проверьте и по возможности пересоздайте крипто-кошельки, чистите зависимости и lock-файл отeasy-day-js. - Отключайте install-скрипты по умолчанию.
npm install --ignore-scripts(или настройка в.npmrc) убирает главный векторpostinstall-зловредов. Отдельные пакеты, которым скрипты реально нужны, можно разрешать точечно. - Не запускайте
npm installпод тем же пользователем, где лежат кошельки и продовые секреты. Ставьте зависимости в изолированном окружении/контейнере, а не на машине с MetaMask в браузере. - Фиксируйте версии и следите за свежими релизами. Массовая перезаливка всего scope за час — аномалия, которую ловят инструменты вроде Socket, StepSecurity, Snyk. Свежий пакет != безопасный пакет.
- Тот же принцип — к MCP-серверам и агентским тулзам. Их вы тоже часто ставите через npm/pip по совету ИИ. Проверяйте издателя и не давайте им доступ к секретам без нужды.
Коротко: удобство «поставил и забыл» — ровно то, на чём строится такая атака. Немного паранойи на этапе установки стоит дешевле, чем угнанный кошелёк.
Источники
- Microsoft Security Blog — Inside the Mastra npm supply chain compromise by Sapphire Sleet (первоисточник, 17.06.2026)
- The Hacker News — 145 Mastra npm Packages Compromised via Hijacked Contributor Account
- StepSecurity — Mastra npm Supply Chain Attack: 140+ Packages Backdoored via easy-day-js Typosquat
- Snyk — A Forgotten Contributor Account Compromised the Entire Mastra npm Package Scope
- BleepingComputer — Microsoft links Mastra AI supply chain attack to North Korean hackers