Открытый сканер уязвимостей Trivy, широко используемый для проверки контейнеров, Kubernetes-кластеров и репозиториев, оказался в центре сложной атаки на цепочку поставок ПО. Злоумышленники встроили инфостилер в GitHub Actions и релизы проекта, что поставило под угрозу секреты в CI/CD-пайплайнах и на машинах разработчиков.
Trivy и масштаб компрометации: почему инцидент критичен
Trivy, разрабатываемый компанией Aqua Security, — один из наиболее популярных опенсорсных сканеров уязвимостей, набравший более 33 200 звёзд на GitHub. Инструмент широко интегрирован в процессы DevSecOps и автоматические пайплайны, поэтому любое вмешательство в его поставку напрямую затрагивает безопасность цепочки поставок программного обеспечения.
Атака произошла в четверг: опираясь на украденные учётные данные, злоумышленники выполнили force-push для 75 из 76 тегов в репозитории aquasecurity/trivy-action и заменили семь тегов setup-trivy. В результате теги начали указывать на вредоносные коммиты. Были скомпрометированы, в частности, версии @0.34.2, @0.33 и @0.18.0, тогда как единственной неизменённой осталась @0.35.0. Вредоносный релиз Trivy v0.69.4 оставался доступен около трёх часов, а подменённые теги GitHub Actions — порядка 12 часов.
Как работала атака: подмена тегов GitHub Actions и троянизированные релизы
По наблюдениям специалистов Socket и Wiz, ключевой особенностью операции было то, что злоумышленники не создавали новых коммитов и релизов. Вместо этого они перенаправили уже существующие теги на вредоносные коммиты, клонировав метаданные оригинальных: имя автора, email, временные метки и текст сообщений с номерами PR. Такой подход минимизировал аномалии в истории репозитория и снижал вероятность срабатывания уведомлений.
Параллельно был изменён скрипт entrypoint.sh в GitHub Actions, а также опубликованы троянизированные бинарные файлы Trivy v0.69.4 через GitHub Releases, Docker Hub, GHCR и ECR. Позднее мейнтейнеры удалили все вредоносные артефакты, однако за время активности атаки любой воркфлоу, ссылавшийся на скомпрометированные теги, автоматически подгружал вредоносный код. Это типичный пример supply chain-атаки, когда компрометируется доверенный компонент, встроенный в множество чужих пайплайнов.
Функциональность инфостилера: какие данные утекали
Вредоносный код запускал полноценный Trivy для сохранения нормального поведения инструмента и параллельно — инфостилер. Задача малвари заключалась в извлечении чувствительных данных как из CI/CD-сред, так и с рабочих станций разработчиков.
Инфостилер собирал переменные окружения, сканировал файловую систему в поисках учётных данных и конфигураций: SSH-ключей, настроек AWS, GCP и Azure, kubeconfig-файлов, Docker-конфигов, .env-файлов, паролей баз данных, токенов Slack и Discord, TLS-ключей, VPN-конфигураций и данных криптокошельков. Дополнительно он перечислял сетевые интерфейсы и анализировал регионы памяти процесса GitHub Actions Runner.Worker в поисках JSON-строк с секретами.
Все собранные данные шифровались и отправлялись POST-запросом на тайпосквотный домен scan.aquasecurtiy[.]org, визуально напоминающий легитимный домен Aqua Security. В случае неудачной эксфильтрации малварь создавала в аккаунте жертвы публичный репозиторий tpcp-docs и выгружала информацию туда — дополнительный, нетипичный для классических инфостилеров канал утечки.
На машинах разработчиков троянизированный бинарник дополнительно устанавливал Python-пейлоад (~/.config/systemd/user/sysmon.py), регистрировал его как systemd-сервис и периодически опрашивал удалённый сервер на наличие новых полезных нагрузок. Это обеспечивало устойчивую постэксплуатационную закреплённость в системе.
Предполагаемая группировка TeamPCP и связь с другими кампаниями
Аналитики связывают атаку с группировкой TeamPCP (известной также как DeadCatx3, PCPcat и ShellForce). Идентификация основана, в частности, на комментарии «TeamPCP Cloud stealer» в завершении одного из Python-скриптов. По данным Socket, эта группа специализируется на атаках на облачную инфраструктуру и активно эксплуатирует неправильно сконфигурированные Docker API, Kubernetes-кластеры, Ray dashboards и серверы Redis.
Компания Aikido дополнительно указывает на связь инцидента с вредоносной кампанией CanisterWorm — саморазмножающимся червём, нацеленным на npm-пакеты. Этот червь использует украденные npm-токены для публикации вредоносных версий и способен компрометировать десятки пакетов за минуты. Для управления им используется децентрализованная инфраструктура на базе Internet Computer (ICP), что затрудняет блокировку. На фоне уже известных атак на цепочку поставок (SolarWinds, Codecov, вредоносные npm-пакеты) данный инцидент вписывается в устойчивый тренд смещения атакующих «влево» — ближе к процессам разработки и сборки.
Корневая причина: компрометация расширения VS Code и повторный взлом
Мейнтейнер Trivy Итай Шакури сообщил, что истоки текущего инцидента уходят к более ранней атаке от 1 марта 2026 года. Тогда было скомпрометировано расширение Aqua Trivy для VS Code, что позволило злоумышленникам получить учётные данные с правами записи к GitHub-аккаунту Trivy. После первого инцидента Aqua Security заменила токены, однако часть артефактов — API-ключи, сертификаты, пароли — осталась доступной нападающим, что и позволило им вернуться и провести более разрушительную операцию.
Примечательно, что злоумышленники также удалили из репозитория Trivy информацию о мартовской компрометации, пытаясь скрыть историю атак и усложнить анализ цепочки событий.
Риски для организаций и практические меры защиты
Кого затрагивает инцидент
Организации, использовавшие скомпрометированные версии GitHub Actions или бинарников Trivy, должны исходить из предположения о полной компрометации своих секретов. Это касается не только переменных окружения пайплайнов, но и привязанных к ним инфраструктурных ресурсов: облачных аккаунтов, репозиториев, кластеров Kubernetes, БД и сервисов сообщений.
Рекомендуемые шаги реагирования
Мейнтейнеры проекта рекомендуют всем потенциально затронутым пользователям немедленно ротировать все секреты: облачные учётные данные, SSH-ключи, токены API, пароли от БД, OAuth-токены, ключи от VPN и мессенджеров. Дополнительно целесообразно:
- провести аудит всех CI/CD-пайплайнов и логов GitHub Actions на предмет подозрительных запусков и аномальных сетевых соединений;
- заменить обращения к тегам в GitHub Actions на зафиксированные хэши коммитов, где это возможно;
- ограничить права GitHub-токенов по принципу наименьших привилегий и включить обязательное использование аппаратных ключей/2FA для критичных аккаунтов;
- внедрить регулярное сканирование секретов в репозиториях и артефактах (secret scanning) и контроль целостности релизов (подписанные релизы и проверки подписи);
- пересмотреть процессы управления расширениями IDE, плагинами и сторонними инструментами, имеющими доступ к учётным данным разработчиков.
Атака на Trivy демонстрирует, насколько уязвимой может быть инфраструктура даже вокруг популярных и проверенных временем опенсорс-проектов. Надёжность цепочки поставок сегодня определяется не только качеством кода, но и зрелостью процессов управления доступом, секретами и артефактами. Компаниям, использующим инструменты безопасности в CI/CD, стоит относиться к ним как к компонента́м повышенного риска: регулярно проверять их источник, фиксировать версии по хэшам, отслеживать аномалии в репозиториях и не откладывать обучение команд безопасным практикам разработки и эксплуатации.