В конце июня 2026 года в реестре NPM появилась серия вредоносных пакетов, за два дня загруженных почти 20 тысяч раз. Эти пакеты маскировались под популярные инструменты для работы с искусственным интеллектом: Anthropic, LangChain, Ollama, OpenAI и Vercel. Кроме того, один пакет имитировал библиотеку для хеширования паролей Argon2. Каждая установка запускала скрипт сбора данных и отправляла информацию на удалённый сервер. Необычность кампании заключается в том, что автором оказался основатель израильского стартапа в сфере кибербезопасности, который действовал под своим именем.
Описание
Пять из шести пакетов - это типичный typosquatting: названия слегка изменены, чтобы обмануть разработчика, торопящегося установить библиотеку. Вот список: anthropic-toolkit (копирует @anthropic-ai/sdk), ai-sdk-helpers (Vercel AI SDK), ollama-helpers (Ollama), openai-agents-helpers (OpenAI Agents SDK) и @langgraphjs/toolkit (LangChain LangGraph.js). Шестой пакет, @aspect-security/argon2, использует имя известной консалтинговой фирмы по безопасности Aspect Security и название реальной библиотеки argon2. Все пакеты опубликованы с одной учётной записи. Наибольшее количество загрузок за последнюю неделю июня получили openai-agents-helpers (3 108) и ollama-helpers (2 692). Суммарно за месяц - более 20 тысяч установок.
Механизм атаки стандартен для атак на цепочки поставок. Вредоносная нагрузка находится не в коде самой библиотеки, а в скриптах, выполняемых во время установки. Поле postinstall в package.json запускает файл scripts/postinstall.js размером 16 Кбайт. Этот скрипт собирает детальную информацию о системе разработчика и отправляет её на Cloud Run-хост с адресом npm-package-logger-228835561205.europe-west1.run[.]app. Предоставленный анализ показывает, что скрипт маскируется под сбор анонимной телеметрии и даже предлагает отключить его через переменную окружения. Однако на самом деле он извлекает 11 категорий данных: имя хоста, имя пользователя ОС, адрес электронной почты из Git-конфигурации, логин GitHub CLI, список email-адресов коллег из reflog Git, URL удалённого репозитория, комментарии к SSH-ключам, профили AWS и GCP, домен DNS корпоративной сети, метаданные проекта и версию Node.js. При этом скрипт намеренно избегает кражи учётных данных - не читает приватные ключи и токены. Такая избирательность не случайна.
Автор не просто собирал информацию ради любопытства. Эволюция вредоносного кода прослеживается от более примитивной версии в апрельском пакете @aspect-security/argon2 до сложного многоуровневого сборщика в июньских пакетах. Ранняя версия была размером 601 байт, собирала только имя хоста и Git-email, не имела обработки ошибок и запускалась до установки пакета (preinstall), что могло привести к сбою. Июньские версии улучшены: добавлены обработка ошибок, маскировка под телеметрию, сбор SSH-ключей, данных облачных профилей и рефлога. Изменения затронули все пять пакетов одновременно, что указывает на одного оператора, который методично оттачивал технику.
Кампания примечательна не только технической проработкой, но и личностью автора. Учётная запись NPM, с которой опубликованы пакеты, связана с основателем стартапа по кибербезопасности, находящегося в режиме скрытого запуска. В отличие от типичных атак, использующих одноразовые аккаунты, этот оператор действовал открыто. Исследователи, обнаружившие связь, сообщили о пакетах в реестр NPM, и все они, а также учётная запись, были заблокированы. Тем не менее сам факт вызывает вопросы о мотивации.
Сбор идентификационных данных без кражи учётных данных - нетривиальный выбор. Полученная информация не позволяет немедленно получить доступ к системам, но формирует профиль разработчика и его окружения. Эти данные могут быть использованы для целевых фишинговых атак, социальной инженерии или даже продажи в качестве лидов для других злоумышленников. Особую ценность представляют email-адреса коллег, извлечённые из рефлога, и DNS-домен, раскрывающий название компании. По сути, это разведка перед более серьёзным вторжением.
Однако существует и другая гипотеза. Поскольку автор связан со стартапом по кибербезопасности, можно предположить, что кампания служила сбором данных для коммерческого продукта. Стартап, работающий с анализом цепочек поставок или профилированием разработчиков, мог использовать такие методы для создания базы данных реальных сред. Выбор рекон-без-краж-учётки, тщательное маскирование и отказ от криминальной нагрузки укладываются в эту логику. Но независимо от мотива, развёртывание вредоносного кода на тысячах машин без согласия разработчиков является нарушением закона.
Для защиты от подобных атак необходимо учитывать, что скрипты установки - это полноценное выполнение кода, которое не проверяют обычные сканеры уязвимостей. Рекомендуется отключить выполнение скриптов установки через настройку ignore-scripts=true в NPM или pnpm. Любой скрипт, который читает файлы из ~/.ssh, ~/.aws или .git/logs и отправляет данные на внешний сервер, является вредоносным, даже если он не крадёт пароли. Использование serverless-платформ вроде Cloud Run для эксфильтрации делает трафик практически неотличимым от легитимного, поэтому корпоративным командам следует усилить мониторинг исходящих соединений к неизвестным доменам run.app.
Вероятно, эта кампания - не последняя. Экосистема разработчиков AI-инструментов остаётся привлекательной целью из-за высокого доверия и частоты установок новых библиотек. Комбинация качественной социальной инженерии, постоянного совершенствования кода и открытости автора делает этот случай уникальным, но он сигнализирует о тенденции: злоумышленники всё чаще действуют не как воры, а как разведчики, собирая данные для будущих атак.
Индикаторы компрометации
Domain
- npm-package-logger-228835561205.europe-west1.run.app
- npm-package-logger-228835561205.us-central1.run.app