2 мая 2026 года неизвестный оператор под псевдонимом 0xedgerunner провёл целенаправленную атаку на популярный открытый проект Antrea, входящий в Cloud Native Computing Foundation (CNCF). Инцидент начался с подачи вредоносного pull request (PR #8027) с последующей эксфильтрацией учётных данных Jenkins-контроллера. Атака произошла на фоне более ранней компрометации цепочки поставок Trivy в марте 2026 года, однако разработчики Antrea заявили, что не пострадали от того инцидента.
Описание
Antrea - это фреймворк для построения оверлейных сетей Kubernetes с открытым исходным кодом. Проект насчитывает более 1700 звёзд на GitHub и активно поддерживается сообществом, включая ключевых мейнтейнеров из Китая. Его CI-архитектура основана на Jenkins: собственный контроллер Jenkins размещён в AWS-аккаунте, а пул воркеров запускается по требованию для выполнения e2e-тестов. Система использует слэш-команды: мейнтейнеры (а в некоторых конфигурациях и авторы PR) могут отправить комментарий вида /test-conformance, после чего Jenkins запускает соответствующий тест.
5 марта 2026 года была зафиксирована компрометация цепочки поставок Trivy - популярного сканера уязвимостей для контейнеров. Вредоносные теги и релизы для GitHub Actions Trivy (aquasecurity/trivy-action, aquasecurity/setup-trivy) были размещены в репозитории на 12 часов. Рабочие процессы, ссылающиеся на эти Actions по изменяемым тегам, могли получать код, извлекающий секреты из памяти раннера. Antrea использовал эти Actions в своих CI-пайплайнах до 27 марта, когда мейнтейнер зафиксировал ссылки на безопасную версию. Однако команда Antrea утверждает, что инцидент не затронул их, и сторонние исследователи не нашли этому опровержений. Анализ Trivy приводится в отчёте только как контекст: в случае Antrea нет свидетельств того, что учётные данные утекли через эту уязвимость.
Непосредственная атака на Antrea началась 30 апреля с создания учётной записи GitHub 0xedgerunner - чистого throwaway-аккаунта без профиля и социальных связей. В течение 30 часов аккаунт форкнул репозиторий Antrea и создал ветку ci-eks-fix-1777734694. 2 мая в 15:11 UTC был открыт PR #8027 с названием "ci: update EKS conformance test helper [webhook trigger]". Через три минуты после открытия злоумышленник опубликовал пять слэш-команд /test-*, запустив одновременно несколько тестовых заданий на Jenkins. В течение следующего часа ветка получила 19 коммитов, итеративно обновляющих полезную нагрузку.
Ключевым элементом атаки стал файл ci/jenkins/jobs/000_payload.yaml - определение Jenkins Job DSL, использующее Python-десериализационный гаджет. Полезная нагрузка выполняла разведку SSH-конфигураций, проверяла доступность Jenkins-контроллера по адресу 35.164.122[.]165, извлекала учётные данные AWS через IMDSv2 (метаданные экземпляра EC2) и отправляла их на paste.rs и webhook.site. В bash-инъекциях внутри скриптов CI перечислялись переменные окружения, файлы ~/.docker/config.json, ~/.kube/config, ~/.aws/credentials и хранилище учётных данных Jenkins.
Злоумышленнику не требовалось одобрения мейнтейнера для запуска тестов. Jenkins Antrea был доступен по адресу jenkins.antrea.io без аутентификации - любой мог видеть статус заданий и, при запуске, читать вывод, включая потенциально утёкшие учётные данные. Пять команд /test-* были выполнены последовательно, что подтверждает отсутствие контроля доступа.
Мейнтейнер закрыл PR в 17:17 UTC с комментарием: "Грубая попытка эксфильтрации учётных данных. Закрываю PR, блокирую пользователя и сообщаю в GitHub". В ответ злоумышленник написал: "уже разнёс ваш воркер, ха-ха" и "и полный root на ваш контроллер; может, не стоит позволять выполнять случайные задания? LOL". Анализ commit-сообщений на ветке показал, что оператор не скрывал свои намерения: коммиты содержали фразы "ci: root escalation pivot", "ci: exploit agent secret + http internal", "ci: check sshd overrides + controller reachability".
Профиль оператора выходит за рамки одной атаки. 0xedgerunner проводил параллельные кампании против как минимум восьми проектов в первую неделю мая 2026 года, включая magma, gocrane/crane, RSS-Bridge, ScalaIO и другие. Во всех случаях использовался одинаковый шаблон: форк → ветка с бессмысленным именем → PR с видом chore-задачи → быстрая итерация payload → детонация. Оператор применял три варианта подписи в коммитах: tzgate <tzgate@local.lan>, CI Bot <ci@antrea.io> и 0xedgerunner <0xedgerunner@proton.me> - ни один из них не был верифицирован на GitHub, что позволяло избежать появления в графе контрибуций.
Примечательно, что за день до атаки на Antrea оператор открыл feature request в репозитории gato-x - фреймворка для эксплуатации GitHub Actions - с просьбой добавить локальное сканирование репозиториев, чтобы обходить ограничения API GitHub по квоте запросов. Это указывает на масштабную автоматизацию: злоумышленник планировал атаковать десятки проектов, используя повторяемые техники.
Инцидент демонстрирует, как открытые Jenkins-серверы без аутентификации в сочетании с плохо защищёнными CI-триггерами могут привести к полной компрометации инфраструктуры. Уязвимость Jenkins Antrea не была неизвестной: любой участник публичной сети мог получить доступ к веб-интерфейсу и данным о заданиях. Связка публичного Jenkins и автоматического запуска тестов от PR-авторов создала идеальный вектор для supply-chain атаки на процесс разработки. Меры защиты очевидны: ограничение доступа к Jenkins по IP или через аутентификацию, запрет выполнения слэш-команд для неавторизованных пользователей, использование закреплённых тегов вместо изменяемых для всех сторонних Actions, а также внедрение регулярной проверки конфигураций CI на наличие PathTraversal и десериализационных гаджетов. Тенденция к целенаправленным атакам на CI/CD пайплайны открытых проектов подтверждается активностью оператора, который одновременно нацелился на несколько репозиториев. Без своевременного обнаружения и блокировки PR такие инциденты могут приводить к утечке ключей доступа к облачным сервисам, фактически давая злоумышленнику контроль над инфраструктурой разработки.
Индикаторы компрометации
IPv4
- 35.164.122.165
URLs
- https://webhook.site/1d98b695-72df-4e88-885c-5efeb3df75f7