Исследователи кибербезопасности из Wiz Research обнаружили продолжающуюся масштабную кампанию по компрометации цепочки поставок npm, получившую название SHA1-HULUD. Эта атака затронула популярные пакеты, используемые в таких платформах, как Zapier, ENS Domains, PostHog и Postman, с более чем 25 000 репозиториев, уже подвергшихся воздействию.
Описание
По данным мониторинга, каждые 30 минут к числу зараженных добавляется около 1 000 новых репозиториев. Это указывает на активное распространение угрозы. Кампания представляет собой новую вариацию ранее известного вредоносного программного обеспечения Shai-Hulud с измененной тактикой выполнения.
Ключевой особенностью новой волны атак стало выполнение вредоносного кода на этапе preinstall (предустановки). Такой подход значительно расширяет потенциальное воздействие как в средах сборки, так и во время выполнения приложений. Злоумышленники используют скомпрометированные учетные записи maintainer (поддерживающих разработчиков) для публикации троянизированных версий легитимных npm-пакетов.
Анализ полезной нагрузки выявил два основных вектора атаки. Первый механизм работает как бэкдор для зараженных машин. Вредоносный код регистрирует инфицированную систему как автономный исполнитель с именем SHA1HULUD, затем добавляет workflow (рабочий процесс) discussion.yaml, который выполняется специально на автономных исполнителях. Это позволяет злоумышленникам в будущем выполнять произвольные команды на зараженных машинах через обсуждения в репозитории GitHub.
Вторая вредоносная нагрузка занимается эксфильтрацией секретов GitHub. Через workflow formatter_123456789.yml происходит сбор всех секретов, определенных в соответствующем разделе GitHub Secrets, с последующей их загрузкой как артефакта. После успешной эксфильтрации workflow и созданная ветка удаляются для сокрытия следов деятельности.
Исследователи Wiz Threat Research и Aikido подтвердили, что троянизированные npm-пакеты были загружены в реестр npm в период с 21 по 23 ноября 2025 года. После установки вредоносное программное обеспечение эксфильтрирует секреты разработчиков и CI/CD в репозитории GitHub с именами, отсылающими к Shai-Hulud.
Среди подтвержденных скомпрометированных пакетов значатся многочисленные версии @zapier/zapier-sdk, zapier-platform-core, zapier-platform-cli и других пакетов Zapier. Также подверглись атаке пакеты ENS Domains, включая @ensdomains/ens-validation, @ensdomains/content-hash и ethereum-ens. В список зараженных попали пакеты других издателей, такие как @posthog/agent, а также многочисленные пакеты под пространствами имен @trigo, @orbitgtbelgium и @louisle2.
Поведение кампании напоминает предыдущего червя Shai-Hulud, однако различия в структуре полезной нагрузки и логике распространения могут указывать на участие других Threat Actors (угрозных акторов). Атрибуция атаки в настоящее время не подтверждена. Специалисты Wiz наблюдали множественные среды, где эти пакеты были скачаны до их удаления из npm, что свидетельствует об активном воздействии.
GitHub в настоящее время удаляет созданные злоумышленниками репозитории, связанные с этой кампанией, однако атакующие продолжают создавать новые репозитории в рамках продолжающейся активности.
Эксперты по безопасности настоятельно рекомендуют немедленно начать расследование и устранение последствий для всех npm-ориентированных сред. Критически важно очистить кэш npm, удалить node_modules и перейти на известные чистые версии зависимостей. Также необходимо отозвать и заменить все скомпрометированные учетные данные, включая npm-токены, GitHub Personal Access Tokens, SSH-ключи и учетные данные облачных провайдеров.
Для предотвращения подобных инцидентов в будущем рекомендуется ограничить или отключить скрипты жизненного цикла в CI/CD, ограничить исходящий сетевой доступ из систем сборки только доверенными доменами, а также использовать краткосрочные скопированные токены автоматизации. Регулярный аудит сред GitHub и CI/CD на предмет несанкционированных workflow и подозрительных коммитов должен стать стандартной практикой для всех организаций, использующих npm-пакеты в своих процессах разработки.
Индикаторы компрометации
| Пакет | Версия |
|---|---|
| @zapier/zapier-sdk | 0.15.5, 0.15.6, 0.15.7 |
| zapier-platform-core | 18.0.2, 18.0.3, 18.0.4 |
| zapier-platform-cli | 18.0.2, 18.0.3, 18.0.4 |
| zapier-platform-schema | 18.0.2, 18.0.3, 18.0.4 |
| @zapier/mcp-integration | 3.0.1, 3.0.2, 3.0.3 |
| @zapier/secret-scrubber | 1.1.3, 1.1.4, 1.1.5 |
| @zapier/ai-actions-react | 0.1.12, 0.1.13, 0.1.14 |
| @zapier/stubtree | 0.1.2, 0.1.3, 0.1.4 |
| zapier-scripts | 7.8.3, 7.8.4 |
| @ensdomains/ens-validation | 0.1.1 |
| @ensdomains/content-hash | 3.0.1 |
| ethereum-ens | 0.8.1 |
| @ensdomains/react-ens-address | 0.0.32 |
| @ensdomains/ens-contracts | 1.6.1 |
| @ensdomains/ensjs | 4.0.3 |
| @ensdomains/dnssecoraclejs | 0.2.9 |
| @ensdomains/address-encoder | 0.1.5 |
| @posthog/agent | 1.24.1 |
| @trigo/* | Множество пакетов (различные версии) |
| @orbitgtbelgium/* | Множество пакетов (различные версии) |
| @louisle2/* | Множество пакетов (различные версии) |
| Дополнительные пакеты | typeorm-orbit, orbit-nebula-draw-tools, atrix-mongoose, orbit-boxicons, orbit-soap, redux-forge, etc. |