Field Notes / Supply Chain
GhostAction is back in GitHub. Last month 86% of its runs never executed.
Since 7 October 2026 more than 500 GitHub accounts have committed a fake "security audit" workflow that ships your CI secrets, and now your committed cloud and AI keys, to one IP address over plain HTTP. In the previous wave, 3,170 of 3,669 malicious runs never executed, most of them held by GitHub for approval. Here is what the workflow takes, why rotating your secrets is two separate jobs, and the six checks an engineering lead can finish this week.
01 What security-audit.yml actually does
n 8 October at 21:10 UTC an automated tool began committing the same
file into every repository the GitHub account henrywoo could
write to. Sixteen minutes later it had touched 318 of them, 39 originals
and 279 forks, plus uber/athenadriver, an Uber-owned project
where the account holder still had write access as the original author.
Earlier that day a second account, kitao, received the same
treatment across 27 repositories in four minutes, including
pyxel, a game engine with 18,420 stars that publishes to
PyPI and crates.io Socket 2026 .
The file calls itself a security audit. Socket’s researchers put it
plainly: the workflow has no security function. It runs on every push to
any branch, or on demand. It collects two classes of secret and sends
both in one POST to 193.32.204.199.
| What it takes | How it finds them | What the attacker can do next |
|---|---|---|
| GitHub Actions secrets | Reads the secret names your existing workflows reference, then asks the runner for their values | Publish a release of a package your users already trust, with PyPI, crates.io or npm tokens |
| Committed cloud and AI keys | Checks out every branch and tag, then runs 13 patterns across the working tree and the full history | Use AWS key pairs, Anthropic, OpenAI and OpenRouter keys, Google, Slack and SendGrid credentials directly |
| A map of your repositories | Every run reports which repository it ran in | Know which execution contexts it can reach next, even where no secret leaked |
Two details make this wave worse than the last. The AWS patterns capture two lines either side of each key ID, so the attacker gets complete, usable key pairs and not orphaned identifiers. And the history sweep turns every old commit into a liability. A developer who pasted an OpenAI key into a config file in 2023, then deleted it in the next commit, left it in scope for this workflow today.
Socket has not seen how the attackers got the maintainer logins. GitGuardian notes that the commits use the victim’s own identity, which points to stolen credentials. As of 9 October Socket had observed no malicious package versions on PyPI or crates.io from this wave, and the workflow file was still sitting on the default branch of the repositories it checked.
02 Why 3,170 runs never executed
GitGuardian’s count of the late-summer wave is the most useful dataset in this story, because it shows what defence worked. GhostAction is a continuation of the 2025 campaign that hit 817 repositories across 327 users and took at least 3,325 secrets. GitGuardian’s researchers say calling the new wave a revival would be inaccurate. It never stopped.
| 31 Aug to 30 Sep 2026 | Count |
|---|---|
| Public repositories with the malicious workflow | 772, across 373 users and organisations |
| Secret names the injected workflows asked for | 2,577 |
| Malicious runs triggered | 3,669 across 605 repositories |
| Runs that actually executed | 499, in 32 repositories |
| Runs that completed and exfiltrated | 336, taking 26 secrets from 13 repositories |
| Repositories cleaned in public history by 5 October | 124, or 16% |
GitHub held most of those runs for approval GitGuardian 2026 . A repository can require a maintainer to approve workflow runs triggered by outside collaborators and first-time contributors before they touch a runner GitHub Docs . Where that gate was on, the theft waited in a queue for a human, and nobody approved it.
This matches what we see in pipeline reviews. The finding that does the
damage is rarely an exotic flaw in a workflow. It is a personal access
token with write access to every repository its owner ever touched,
including the project they wrote for a previous employer and the fork
they forgot about. uber/athenadriver is that finding in public:
an organisation repository reached through one individual’s account,
years after they wrote it.
03 Rotation is two jobs, not one
Most incident runbooks say one thing after a CI compromise: rotate the secrets. Socket’s write-up is blunt about why that fails here. Rotating Actions secrets does nothing for a committed-credential exposure, and scanning the working tree does nothing for an Actions-secret exposure Socket 2026 . They are separate leaks with separate fixes, and the October workflow takes both.
- The secrets the workflow named. Rotate every one. Revoke personal access tokens outright, since a rotated token with the same scope is the same risk. Treat any completed run as a confirmed theft. Then check your package registries for releases you did not build.
- The keys in your history. Scan with
git log -p --all, including unreachable objects, and rotate every credential it finds across all 13 categories. For AWS keys, read CloudTrail for the exposure window and after it: new IAM users, new access keys, regions you never use. - The login that pushed the file. Revoke the maintainer’s sessions, tokens, OAuth grants and SSH keys, and re-enrol them on phishing-resistant MFA. GitGuardian makes the point that rotating secrets alone leaves the stolen GitHub credential in the attacker’s hands, ready for the next wave.
Forks deserve their own line. The 279 forks under one account each carry the workflow. A fork owner who enables Actions, or syncs with the upstream, runs the theft in their own context against their own secrets. Socket calls private forks and mirrors the most exposed, because nobody outside sees them.
04 Six checks for this week
None of this needs a new tool. An engineering lead with organisation admin rights can finish the list below in a working week, and each item closes a path GhostAction has already used. GitHub’s own hardening guide covers the mechanics of each setting GitHub Docs .
- Search every repository and fork for security-audit.yml, github_actions_security.yml and security-check.yml, and for the three known commit messages. Search egress and self-hosted runner logs for 193.32.204.199 and block it
- Require approval for workflow runs from outside collaborators and first-time contributors, on every repository, including the archived ones nobody watches
- Protect default branches so a push needs a pull request and a second reviewer, which turns a direct commit from a stolen login into a request someone has to approve
- Set the default GITHUB_TOKEN permission to read-only at organisation level and grant write per workflow, so one workflow cannot do everything
- Pin third-party actions to a full commit SHA, inventory every secret per repository with its owner, and turn on secret scanning with push protection
- Review who holds write access to which repositories, revoke what former authors and old tokens still reach, and require phishing-resistant MFA for everyone who keeps it
GhostAction has run since September 2025. It took 3,325 secrets in its first wave, 26 in its second, where the approval queue held most runs back, and an unknown number since 7 October from accounts that push straight to the default branch. Your exposure depends on which of those three groups your repositories sit in. We can tell you that in 14 days. You get every path from a developer login to a production secret in your GitHub organisation, ranked by what it unlocks, and the setting or revocation that closes each one. Start with your Threat Map, from $5,000. Enterprise-grade. Not enterprise-priced.
References
Sources
- Socket Research Team. New GhostAction Wave Hits Hundreds of Repos, Expanding Beyond CI/CD Secrets to Cloud Credentials. Socket, 9 October 2026, with update of the same day. socket.dev
- Gaetan Ferry and Guillaume Valadon. GhostAction Returns: 772 Repos Hit in New GitHub Actions Wave. GitGuardian, 7 October 2026. blog.gitguardian.com
- GitHub Docs. Approving workflow runs from public forks and outside collaborators. docs.github.com
- GitHub Docs. Security hardening for GitHub Actions. docs.github.com