Incident
Published 2026-10-25 New
Verified 2026-10-26

Wiz says its 'Gheist' campaign uses stolen GitHub tokens to push ci-sync workflows that print repository secrets into GitHub Actions logs; GitHub's hold on suspicious runs stopped it in public repositories, but Wiz saw successful runs in private repositories and GitHub enterprise environments

Wiz Research said on 25 October 2026 that since 15 September it has been tracking a campaign it calls Gheist, which performs mass abuse of compromised GitHub tokens; the name comes from the user agent gheist that the attackers' tool sends with its GitHub API requests.

According to Wiz, for each repository a token can reach, the tool creates a branch named ci-sync- plus six random characters and commits .github/workflows/sync-check.yml with the message 'ci: sync config'; the workflow prints the repository's secrets, base32-encoded, into its own log (Wiz says GitHub masks secret values only when they appear verbatim, so the encoded secrets print in full), and the tool then downloads the log through the GitHub API and deletes the run seconds later.

Wiz says that because the secrets leave through GitHub's own API, there is no attacker domain or outbound connection to block, and that when a repository has deployment environments the tool also prints environment-scoped secrets, often production credentials.

Wiz says it has recovered more than 13,500 planted branches from more than 850 compromised accounts, ranging from personal projects to enterprise organisations' private repositories. Since 28 July 2026 GitHub has held potentially malicious workflow runs until a collaborator with write access approves them; GitHub's changelog says this protection currently applies to public repositories on github.com only and that GitHub Enterprise Server doesn't add it at this time.

Wiz says every public Gheist run it checked was held and the payloads never ran, but that it has observed successful exploitation and follow-on activity in private repositories and GitHub enterprise environments: in enterprise organisations it saw the tool cycle through tokens of several users and automation accounts within minutes, clone private repositories before planting the workflow, and, hours later, cloud credentials from the same organisation used to enumerate AWS Secrets Manager. On 19 October one variant of the tool added a second job for self-hosted runners that searches the machine for 31 token formats, private keys, .env files and AWS instance-role credentials; Wiz describes that job as buggy.

Wiz says roughly two-thirds of the implicated accounts are no longer available on GitHub, which it says likely indicates response activity, as it reported the campaign to GitHub. The credential sources Wiz could trace were infostealer logs and tokens exposed in earlier supply-chain compromises such as the Trivy compromise in March, and Wiz says Gheist is distinct from the GhostAction campaign. Primary: Wiz Research; wire: The Hacker News (26 Oct).

Product
GitHub Actions in repositories reachable with stolen GitHub tokens (GitHub's hold on suspicious runs covers public github.com repositories only)
Versions
n/a — abuse of stolen tokens, not a product flaw. Indicators (Wiz): branches matching ^ci-sync-[0-9a-z]{6}$; commit message 'ci: sync config' adding only .github/workflows/sync-check.yml; API user agent gheist; on self-hosted runners the files .gdmp_pat, .gdmp_patg and .gdmp_sweep and the string gdmp-pivot in job logs.
Exploited in Australia?
unknown
Patch to
Wiz advises: look for ci-sync-* branches whose only change is .github/workflows/sync-check.yml, for runs on those branches deleted within a minute of completing, and for user agent gheist in GitHub audit logs; if workflows sign in to the cloud with OIDC, check cloud audit logs for role assumptions whose subject includes a ci-sync- branch. If affected, rotate every repository, organisation and environment secret the repository could use (deleting the run or branch doesn't undo the exposure), revoke the tokens that pushed the commits and check their owners' devices for infostealers, treat any self-hosted runner that ran a ci-sync branch and its instance role as compromised, and don't approve held sync-check runs. To harden, Wiz recommends required reviewers on environments with production secrets, OIDC trust limited to protected branches or environments, GitHub Apps or short-lived fine-grained tokens instead of personal access tokens, and ephemeral self-hosted runners without Docker socket or unrestricted metadata access.

tech cloud identity