По данным Wiz, с 15 сентября кампания, получившая название Gheist, создала более 13 500 веток в репозиториях 850+ аккаунтов. Схема простая: с украденным токеном атакующий пушит ветку ci-sync-* с файлом .github/workflows/sync-check.yml и сообщением коммита «ci: sync config». Workflow выводит все доступные секреты в кодировке base32 — встроенная маскировка GitHub такие строки не распознаёт. Затем атакующий скачивает логи и через несколько секунд удаляет запуск.
В ряде корпоративных случаев спустя несколько часов злоумышленники перебирали AWS Secrets Manager. Защита GitHub, которая с 28 июля придерживает подозрительные запуски, работает только для публичных репозиториев на github.com — приватные и GHES не покрыты. С 19 октября появился вариант, нацеленный на self-hosted раннеры; успешных запусков Wiz пока не видел.
Что делать
- Поискать ветки
ci-sync-*, файлsync-check.yml, user-agentgheistв аудит-логах и файлы.gdmp_*на раннерах. - Ротировать секреты репозиториев, организаций и окружений.
- Отозвать токены, с которых шли пуши, и проверить их владельцев на инфостилеры.
- Ограничить доверие OIDC только защищёнными ветками, использовать environments с обязательным подтверждением для чувствительных секретов.
According to Wiz, since Sept 15 the campaign dubbed Gheist has created over 13,500 branches across 850+ accounts. The method is simple: with a stolen token, the attacker pushes a ci-sync-* branch containing .github/workflows/sync-check.yml with the commit message “ci: sync config”. The workflow prints every available secret encoded as base32 — GitHub’s built-in masking does not recognise those strings. The attacker downloads the logs and deletes the run seconds later.
In some enterprise cases AWS Secrets Manager was enumerated hours afterwards. GitHub’s approval hold for suspicious runs, in place since July 28, only covers public repos on github.com — private repos and GHES are not covered. Since Oct 19 a variant targeting self-hosted runners has appeared; Wiz has not yet seen it succeed.
What to do
- Hunt for
ci-sync-*branches,sync-check.yml, thegheistuser agent in audit logs, and.gdmp_*files on runners. - Rotate repo, org and environment secrets.
- Revoke the pushing tokens and check their owners’ machines for infostealers.
- Restrict OIDC trust to protected branches and use environments with required reviewers for sensitive secrets.