← Все новости

Кампания Gheist крадёт секреты GitHub Actions в 850+ аккаунтах через украденные токеныGheist campaign steals GitHub Actions secrets from 850+ accounts using stolen tokens

Автоматизированная кампания пушит в репозитории вредоносный workflow, который печатает все секреты в base32 в обход маскировки и тут же удаляет запуск. Затронуты и приватные репозитории, и GitHub Enterprise Server; кампания продолжается.An automated campaign pushes a malicious workflow that prints every secret as base32 to bypass masking, then deletes the run. Private repos and GitHub Enterprise Server are hit too; the campaign is ongoing.

По данным 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-agent gheist в аудит-логах и файлы .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, the gheist user 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.

Источники