Экосистема npm столкнулась с масштабной цепочкой поставок, в результате которой было скомпрометировано более 40 пакетов, включая популярную библиотеку @ctrl/tinycolor с еженедельным числом загрузок, превышающим 2,2 миллиона. Атака была обнаружена исследователем Даниэлем дос Сантосом Перейрой, который обратил внимание на подозрительное поведение в последней версии пакета.
Описание
Злоумышленники внедрили в обновленные версии пакетов специальную функцию NpmModule.updatePackage, которая автоматически загружает архив пакета, модифицирует файл package.json, внедряет вредоносный скрипт bundle.js, переупаковывает архив и повторно публикует его. Этот механизм позволяет автоматически троянизировать зависимые пакеты без ведома их мантейнеров.
Среди подтвержденных скомпрометированных пакетов - [email protected], @ctrl/[email protected], @ctrl/[email protected], @4.1.2, [email protected] и многие другие, принадлежащие разным мантейнерам. Это указывает на скоординированную кампанию, а не на единичный инцидент.
Вредоносный скрипт bundle.js выполняет автоматическую загрузку и запуск легитимного сканера секретов TruffleHog, который проводит поиск токенов и учетных данных в облачных сервисах на хосте. Скрипт проверяет и использует учетные данные разработчиков и CI, создает workflow в GitHub Actions внутри репозиториев и передает собранные данные на внешний webhook-сервер.
Анализ кода показывает, что скрипт активно ищет переменные окружения, включая GITHUB_TOKEN, NPM_TOKEN, AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY. Для проверки валидности токенов используются запросы к API npm и GitHub. Кроме того, скрипт пытается получить метаданные из облачных сред AWS и GCP, что может привести к утечке временных учетных данных.
Механизм создания рабочих процессов в GitHub Actions представляет особую опасность. После внедрения в репозиторий такой рабочий процесс продолжает функционировать в рамках CI/CD, позволяя атакующим получать постоянный доступ к секретной информации и артефактам. Собранные данные передаются с помощью кодирования base64 в указанный веб-хук, а также могут быть опубликованы в общедоступных репозиториях GitHub, созданных под учетной записью жертвы.
Компания Socket, которая также автоматически обнаружила угрозу, продолжает анализ нагрузки и методов распространения. На текущий момент рекомендуется проверить проекты на наличие указанных версий пакетов, отозвать все возможные токены и провести аудит используемых зависимостей.
По состоянию на 16 сентября 2025 года кампания расширилась и затрагивает почти 500 пакетов npm, включая некоторые открытые пакеты CrowdStrike. Актуальную информацию и рекомендации по мерам защиты можно найти в блоге Socket.dev.
Этот инцидент в очередной раз демонстрирует уязвимость современных экосистем открытого ПО и критическую важность контроля целостности зависимостей в процессах разработки.
Индикаторы компрометации
URLs
- https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7
SHA256
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09