Организации, внедрившие современные практики непрерывной интеграции и доставки (CI/CD), столкнулись с угрозой, исходящей от кампании Shai Hulud. Этот программный червь, связанный с группой TeamPCP, с конца 2025 года нацелен на пакеты в реестрах npm и PyPI. Злоумышленники публикуют вредоносные версии, которые активируются при установке зависимостей или во время выполнения заданий в CI-среде. Основная цель - кража учетных данных сборки, включая токены реестров, ключи GitHub, учетные записи облачных провайдеров и секреты Kubernetes.
Описание
В мае 2026 года платформа FortiCNAPP помогла клиентам выявить инциденты в среде AWS, напрямую связанные с Shai Hulud. В середине месяца исследователи обнаружили признаки продолжающегося доступа к Jenkins-серверу, который соответствовал шаблону кражи учетных данных, характерному для этого червя. Анализ показал, что злоумышленник эксплуатировал роль Jenkins через интернет, повысил привилегии до полного администратора облака, изменил сетевые настройки баз данных и извлек данные из Amazon Redshift. Дополнительно были зафиксированы действия по подготовке к использованию объектного хранилища и почтовых сервисов.
Кампания Shai Hulud демонстрирует, как одна скомпрометированная зависимость может превратиться в канал доступа к производственной облачной инфраструктуре. Ранее наблюдаемые инциденты описывали повторяющуюся модель: после установки вредоносного пакета полезная нагрузка собирала учетные данные из сборочной среды, включая токены реестров, ключи GitHub, учетные данные AWS, секреты Kubernetes и SSH-ключи. Украденные данные позволяли автоматически публиковать дополнительные отравленные пакеты. В последних вариантах атакующие злоупотребляли доверенной публикацией OIDC в GitHub Actions, в результате чего артефакты содержали легитимные подписи, хотя сам исполнитель был скомпрометирован.
Согласно данным FortiCNAPP, за время инцидента было зафиксировано 1095 подозрительных событий. Ключевым сигналом стал alert "Potentially Compromised Keys", который объединил шесть часов активности в единую картину. Среди наблюдений: 202 случая невозможных перемещений, 170 событий разведки инфраструктуры (S3, RDS, Redshift), 128 модификаций групп безопасности и кластеров, 52 случая повышения привилегий и 20 случаев использования инстанс-учетных данных из внешнего IP.
Хотя прямое доказательство того, что именно заражение червем вызвало компрометацию облака, отсутствует, косвенные улики убедительны. Временная привязка показывает, что компрометация цепочки поставок произошла в начале мая, а злоупотребление облаком началось примерно через две недели. Первое вредоносное действие в CloudTrail использовало роль Jenkins EC2 - именно тот тип учетных данных, который Shai Hulud нацелен красть. Внешнее использование инстанс-роли согласуется с тактикой группы TeamPCP.
Технический анализ выявил семь этапов атаки. На первом этапе злоумышленник использовал учетные данные Jenkins с внешнего IP, что было немедленно зафиксировано системой мониторинга. Затем он создал IAM-пользователя cloudops-monitor с полными правами администратора и сгенерировал для него ключи доступа. После этого последовало манипулирование сетевой инфраструктурой: были созданы группы безопасности с безобидными описаниями, разрешающие SSH-доступ с любого адреса, и запущены тестовые инстансы EC2. Атакующий целенаправленно исследовал VPC с помощью вызовов DescribeSubnets и DescribeRouteTables.
Наибольшую агрессию он проявил в плоскости управления базами данных. Для производственного кластера Aurora PostgreSQL были выполнены команды ModifyDBCluster с попыткой сменить мастер-пароль и прикрепить подконтрольную злоумышленнику группу безопасности. Для Redshift - аналогичная операция ModifyCluster и вызов AuthorizeSecurityGroupIngress для порта 5439. Таким образом открывался сетевой путь к данным. Далее последовали сотни вызовов ListSecrets и GetSecretValue для имен секретов, связанных с хранилищами данных, в частности datawarehouse_redshift и truedata_reporting_redshift. После получения соединений была выполнена серия из примерно 90 циклов ExecuteStatement через Redshift Data API - что свидетельствует о целенаправленной выгрузке информации.
Для эксфильтрации данных атакующий использовал явные именования. Он прикрепил к существующей аналитической роли встроенные политики exfil-s3-write и exfil-s3-full, дающие полный контроль над объектами в производственном бакете. Затем через AssumeRole с именем сессии exfil он активировал высокопривилегированную резервную роль и выполнил SendCommand на управляемом инстансе EC2 с помощью AWS-RunShellScript. Завершающим этапом стала подготовка к использованию Amazon SES: злоумышленник запросил квоты отправки, проверил и создал подтверждение нескольких корпоративных почтовых адресов. Часть этих действий выполнялась уже изнутри скомпрометированного VPC.
Ключевой урок для защитников заключается в необходимости рассматривать CI/CD-исполнители как ресурсы нулевого уровня. Роли и инстанс-профили, используемые в конвейерах, должны иметь минимальные привилегии без доступа к административным путям, широким полномочиям Secrets Manager или хранилищам данных. Необходимо настроить оповещения о внешнем использовании инстанс-учетных данных - это был самый ранний облачный сигнал. Дополнительно следует контролировать изменения в плоскости управления базами данных: вызовы ModifyDBCluster и ModifyCluster с прикреплением новых групп безопасности должны быть запрещены по умолчанию или вызывать автоматическую блокировку. Имена явной эксфильтрации (exfil-s3-full) и сессии STS (exfil12) следует включить в правила высокодостоверного детектирования. Инцидент Shai Hulud доказывает, что отравленная зависимость в конвейере может привести к полноценной утечке данных из облачного хранилища.
Индикаторы компрометации
IPv4
- 185.204.1.225
- 89.22.231.63
IAM user
- cloudops-monitor