Skip to content
Rush Commerce
Software & Dev3 min read

wfx-loot: 4,837 hijacked GitHub accounts stole CI secrets

The wfx-loot campaign ran a CI secret stealer in at least 1,806 GitHub repositories and left Azure and AWS backdoors. Rotate secrets, then hunt persistence.

Rotating your keys will not end this one. A campaign called wfx-loot used 4,837 hijacked GitHub accounts to push a CI secret stealer into tens of thousands of repositories since November 10. The stealer ran in at least 1,806 of them. It takes every secret your pipeline can reach, then plants access in Azure and AWS that survives a rotation. OX Security says the campaign is still live.

What actually happened

There is no GitHub Actions bug here. The attacker holds valid tokens for real developer and bot accounts.

  • The probe. Each account opens a pull request titled docs: dependency audit notes from a wfx-docs branch to test write access. Aikido counted probes in 61,764 repositories. More than 10,000 of them belong to someone other than the hijacked account.
  • The payload. Where the token can write, a 1,500-line shell script lands in a workflow, a CI script or an npm postinstall hook. OX Security counted 8,093 public repositories with a malicious commit on the default branch, 771 of them through postinstall. That route also runs on a developer laptop.
  • The loot. Actions secrets, GITHUB_TOKEN, OIDC tokens, cloud credential files, SSH keys, registry tokens, and keys for OpenAI, Anthropic, Cursor, Copilot and Codex, per Aikido. It reads runner process memory too.
  • The cleanup. The commit is reverted within a minute, and the workflow run and its logs are deleted. A missing run number is often the only trace.
  • The backdoor. The script adds federated credentials named wfx-ci-… to Azure AD apps and rewrites AWS role trust policies to allow any account.

SecurityWeek reports that nobody has shown how the tokens were stolen.

Why wfx-loot matters for your business

Your CI pipeline holds the keys to production: the cloud role that deploys, the Stripe key, the AI API key with your card behind it. One contractor with write access and a stolen token is enough. Run this check today:

  1. Search your org for the PR title, the wfx-docs branch, and commits named ci: refresh build cache, chore: add ci helper, ci: restore or ci: cleanup since November 10.
  2. Look for gaps in workflow run numbers. Deleted runs leave holes.
  3. If anything hits, treat every secret and cloud role that workflow could reach as stolen. Revoke and rotate all of them.
  4. Then hunt persistence. Check Azure for wfx-ci-* federated credentials, and AWS for role trust policies with "AWS": "*" and sessions named wfx-*.
  5. Cut standing access. Remove old collaborators and bot tokens with write. Pin Actions to commit SHAs while you're in there.

Key takeaways

  • wfx-loot used 4,837 hijacked GitHub accounts and probed 61,764 repositories
  • The stealer ran in at least 1,806 repositories, then deleted its own logs
  • It takes CI secrets, cloud credentials and AI tool keys
  • Azure and AWS backdoors survive a secret rotation
  • Search for the indicators, rotate, then check cloud trust policies

Your pipeline should not hold keys that outlive the job. We build deploys on short-lived credentials, scoped roles, and a written list of who can push to what. Ask us to audit your CI access, or see how we build.

Sources: Aikido, OX Security, SecurityWeek.

  • #github-actions
  • #supply-chain
  • #ci-secrets
  • #wfx-loot
  • #cloud-security
TR

Tommy Rush — Founder, Rush Commerce

Operator turned builder. 15+ years running operations — now shipping the systems businesses run on. More

Get The Rush Report weekly — one email, zero fluff.