С 31 августа по 30 сентября 2026 года вредоносный сценарий автоматизации попал в 772 публичных репозитория на GitHub, принадлежащих 373 пользователям и организациям. Все изменения вносили от имени самих жертв, судя по всему - с помощью украденных учётных данных. Под ударом оказался конвейер сборки и доставки кода, или CI/CD: цепочка автоматических задач, которая собирает, тестирует и публикует программы. Компании хранят там ключи от серверов, облачных сервисов и баз данных. Именно эти ключи и нужны атакующим.
Описание
Схему назвали GhostAction. В чужие проекты добавляют файл описания задачи, замаскированный под проверку безопасности GitHub Actions. Название файла и текст изменения выглядят безобидно. На деле сценарий запускается при каждом обновлении кода и передаёт на сервер атакующих значения секретов - так на GitHub называют ключи, токены и пароли, которые держат отдельно от кода. Перебирать всё подряд злоумышленники не стали. Сначала они изучают историю проекта, находят упоминания нужных переменных в законных задачах и подставляют их имена в свой сценарий. Все украденные значения уходят на чужой сервер одним запросом.
Кампания не прекращалась. По данным GitGuardian, волна 2025 года охватила 817 репозиториев у 327 пользователей и позволила вынести не менее 3325 секретов. Приёмы позже повторили в кампаниях Shai-Hulud, а сейчас их используют в семействе вредоносных программ Mini Shai-Hulud. Часть сценариев, внедрённых в прошлые волны, никто так и не удалил. В 92 случаях атакующий не добавлял новый файл, а переписывал старый, перенаправляя его на новую точку сбора данных. Независимо вредоносные коммиты заметили аналитики Cynative и сообщили о находке.
Новая волна шла отдельными толчками. 31 августа сценарий появился в 143 репозиториях. Со 2 по 5 сентября - примерно в 400, пик пришёлся на пятое число: 294 проекта за сутки. 15 сентября добавили ещё 103. Мелкие вставки продолжались до конца месяца. Всего сценарии целились в 2577 секретов. Чаще всего это закрытые SSH-ключи и данные доступа к серверам развёртывания, 446 наименований. Следом идут учётные данные Azure (218), доступы к реестрам контейнеров DockerHub и GHCR (142), пароли к базам данных (112), ключи AWS (106), доступы к FTP (92), данные Google Cloud и Firebase (80), токены GitHub (66). В список попали также токены ботов Telegram, Slack и Discord, ключи Cloudflare, npm, PyPI и поставщиков ИИ.
Реальный ущерб скромнее масштаба замысла. GitHub удерживал большинство запусков на подтверждении: из 3669 попыток в 605 репозиториях выполнились лишь 499 в 32 проектах. Успешно завершились 336 - они вынесли 26 секретов из 13 репозиториев. Сценарий срабатывает на каждом обновлении, поэтому запуски чаще вызывали обычные коммиты разработчиков, а не сама внедрённая задача.
Следы убирают медленно. Публичная история хранит десятки коммитов с прямыми формулировками про удаление вредоносного сценария. К 5 октября 2026 года очистили лишь 124 репозитория - 16 процентов затронутых. Остальные проекты по-прежнему уязвимы: файл лежит в истории и сработает при следующем обновлении кода.
Отдельный эпизод связан с популярным открытым проектом DevOpsGPT из организации kuafuai, у него около 6000 отметок "звезда". За полтора суток до первой волны, 30 августа 2026 года, там появился коммит с безобидным сообщением об обновлении версии одного из компонентов. Он менял четыре файла и встраивал в образ приложения майнер XMRig - программу для добычи криптовалюты. Скрытый процесс стартовал вместе с приложением, а служебная задача каждые 45 секунд проверяла, жив ли он, и перезапускала при остановке. Настройки добычи хранились в зашифрованном виде. Готовый образ выложили в публичный реестр. Позже с той же учётной записи в четыре проекта организации, включая DevOpsGPT, добавили сценарий GhostAction - теперь целью стали доступы к хранилищу образов. 18 сентября сопровождающие удалили сценарии, 4 октября откатили и правку с майнером.
Связь между двумя атаками авторы разбора считают неочевидной и приводят доводы в пользу версии о разных исполнителях. Сценарии GhostAction создавали через программный интерфейс GitHub от обычного имени владельца учётной записи. Майнерный коммит пришёл с другого адреса электронной почты, которого у разработчика прежде не замечали. Полезная нагрузка GhostAction универсальна и работает автоматически, а майнер изготовили под конкретный проект и тщательно замаскировали. Следы майнера, его настроек и криптокошелька нашлись только в одном репозитории, тогда как GhostAction за считаные часы накрыл сотни чужих проектов.
Украденные доступы редко принадлежат одному хозяину. Сопоставление списка жертв с другой вредоносной активностью на GitHub выявило 13 репозиториев, которые использовали ещё и для майнинга через GitHub Actions. Это минимум четыре кампании с собственными кошельками, пулами и инфраструктурой, некоторые из них затронули тысячи проектов. В большинстве случаев майнеры появлялись спустя месяцы после GhostAction, иногда - за считаные дни до него. Одна кампания даже скопировала чужой стиль оформления коммитов. Объяснение простое: утёкшие токены, данные из журналов программ для кражи паролей и старые наборы учётных данных перепродают и переиспользуют десятки групп. Одну учётную запись разработчика могут эксплуатировать несколько не связанных между собой атакующих. Поэтому смены вынесенных секретов недостаточно. Нужно найти и отозвать сам доступ к GitHub, иначе им воспользуется кто-то другой.