Stolen GitHub tokens are dumping secrets from private repositories. Search for ci-sync branches today

By George Bailey   Published: 10/27/26   4 min read

A campaign called Gheist is using stolen GitHub tokens to push a small workflow into every repository a token can reach. The workflow prints the repository’s secrets into its own Actions log, the attackers download the log, and the run is deleted seconds later.

Wiz has tracked it since September 15 and recovered more than 13,500 planted branches from more than 850 compromised accounts. Public repositories were mostly protected by a new GitHub hold. Private repositories and GitHub Enterprise Server were not.

Gheist deletes its GitHub Actions runs seconds after they finish. If a ci-sync branch ran in your private repo, treat every secret it could read as gone.

Stolen GitHub tokens are planting ci-sync branches

For each repository, the tool creates a branch named ci-sync- plus six random characters and commits one file, .github/workflows/sync-check.yml, with the message ci: sync config. The push starts the workflow, which prints the job environment and the full secrets context encoded in base32. GitHub masks secrets only when they appear verbatim, so the encoded values print in full.

Where a repository has deployment environments, one version runs a job per environment, so environment-scoped secrets print too; Wiz says these are often production credentials. In enterprise organizations Wiz saw the tool cycle through several users’ and automation accounts’ tokens within minutes, clone private repositories, and hours later saw cloud credentials from the same organization used to enumerate AWS Secrets Manager. As of October 24 the campaign was still running.

Private repositories and GitHub Enterprise Server have no hold

Since July 28, GitHub has held potentially malicious workflow runs in public repositories until a collaborator approves them, and every public Gheist run Wiz checked was stuck waiting. GitHub says that hold does not apply to private repositories or to GitHub Enterprise Server. There, audit logs show the runs completing and then being deleted by the gheist user agent.

GitHub’s documentation says anyone with write access to a repository can read its configured secrets, so one stolen developer or bot token is enough. Wiz traced some tokens to infostealer logs and to earlier supply-chain attacks. Because the secrets leave through GitHub’s own API, there is no attacker domain to block.

Search for ci-sync branches, then rotate what they could read

Forward this

For whoever owns our GitHub organization: a campaign is using stolen GitHub tokens to push “ci-sync” branches that dump repository secrets into Actions logs, and private repos are not covered by GitHub’s new safeguard. Can we search for ci-sync branches today and rotate any secrets a hit repository could read?

Details

Hunt / verify

Source: Wiz: Gheist indicators and hunting steps

Sources

George Bailey

George Bailey is the byline of the CyberExperts editorial desk, the team behind the CyberExperts Daily Brief. The desk covers vulnerabilities, breaches and security news from vendor advisories, CISA alerts and other primary sources, and links those sources in every story. Questions or corrections: [email protected].