qvib.pro
EN

17.06.2026 · Безопасность

Что случилось

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 по совету ИИ. Проверяйте издателя и не давайте им доступ к секретам без нужды.

Коротко: удобство «поставил и забыл» — ровно то, на чём строится такая атака. Немного паранойи на этапе установки стоит дешевле, чем угнанный кошелёк.

Источники