Атака на цепочку поставок npm: червь похищает учётные данные
4 августа 2026 года злоумышленники осуществили Supply Chain Compromise, получив доступ к GitHub-аккаунту разработчика key-value storage библиотеки keyv, широко используемой в экосистеме npm. Используя этот доступ, они загрузили вредоносные файлы в keyv и несколько связанных пакетов, что привело к распространению credential-stealing worm через эти библиотеки, включая популярные пакеты cacheable и flat-cache.
Вектор атаки и первоначальная компрометация
Злоумышленники получили контроль над учётной записью разработчика и внесли изменения непосредственно в основную ветку затронутых репозиториев. В каждый из них были добавлены два вредоносных файла – setup.mjs и Math_Symbol.js. После этого файлы package.json были модифицированы таким образом, чтобы setup.mjs автоматически запускался при выполнении пользователями команды npm install. Этот замаскированный loader тихо загружает JavaScript runtime Bun и передаёт управление основной полезной нагрузке, встроенной в Math_Symbol.js.
Анализ вредоносной нагрузки
setup.mjs— скрытый загрузчик, обеспечивающий среду выполнения Bun и активацию payload.Math_Symbol.js— крупный JavaScript-файл (728 КБ), реализующий многофункциональную кражу данных и механизм червя.
Payload, содержащийся в Math_Symbol.js, извлекает конфиденциальные учётные данные из пользовательского окружения, шифрует их и отправляет в публичный репозиторий GitHub, помеченный заголовком «Shai-Hulud: Here We Go Again.
» Кроме того, вредоносный код демонстрирует worm-like behavior, позволяя заражать другие пакеты, используемые поражёнными разработчиками.
Функционал кражи данных
Файл Math_Symbol.js реализует несколько методов извлечения секретов, нацеленных на самые разные хранилища скомпрометированных машин. Среди его возможностей:
- сбор аутентификационных токенов из
~/.npmrcи его вариантов; - проверка токенов через реестр npm;
- извлечение секретов из сервисных аккаунтов и конфигурационных файлов Kubernetes;
- поиск чувствительных API-ключей и токенов, связанных с такими сервисами, как Stripe и Slack, по всей файловой системе жертвы.
Эксфильтрация и worm-механизм распространения
Похищенные данные направляются в публичный репозиторий на GitHub, играющий роль collection point. Механизм распространения червя активно использует скомпрометированные учётные данные для дальнейшего продвижения. Обнаружив токены ghs_, вредонос пытается внести вредоносные изменения в различные ветки других репозиториев, к которым получает доступ, эффективно сливаясь с легитимной историей коммитов. Дополнительно устанавливаются hooks, запускающие выполнение payload непосредственно в средах разработки, таких как Visual Studio Code.
Выводы и последствия
Инцидент обнажает серьёзные уязвимости экосистемы npm, вызванные зависимостью от целостности пакетов, и демонстрирует потенциально разрушительные последствия Supply Chain-атак. Обнаруженные компоненты malware подчёркивают важность постоянной бдительности и внедрения строгих мер безопасности, включая контроль целостности зависимостей, мониторинг подозрительной активности в репозиториях и ограничение автоматического выполнения скриптов при установке пакетов.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.



