Security

How to Check Your Repos for the GhostAction Workflow and Lock Down Actions

A fake security-audit workflow is stealing secrets from GitHub repositories. Here are the searches, the cleanup order, and the settings that stop it.

Marcus Oyelaran

Security & DevOps Specialist

Published 7 min read
Stock photo related to matrix, binary, security, code for the topic of cybersecurity code padlock
On this page 8 sections

To check for GhostAction, search your repositories for workflow files named security-audit.yml, github_actions_security.yml, or security-check.yml, and for the markers AKIA_CTX_START and 193.32.204.199. If you find one, assume every secret in that repository, including deleted ones, is exposed and rotate it.

GhostAction is a supply chain campaign that plants a fake "security audit" workflow in a repository using a stolen maintainer credential. The workflow then ships the repository's secrets to an attacker's server. StepSecurity reported a new wave on October 8, 2026, and The Hacker News covered it on October 9 and updated the story on October 15. This guide is for maintainers and platform engineers who own GitHub Actions. It gives you a search checklist, a log review, a cleanup order, and five settings that would have blunted the attack. Backtrace covers developer security and DevOps, and we focus on steps you can run today.

What is the GhostAction campaign?

GhostAction first appeared in September 2025, when StepSecurity reported over 3,000 secrets stolen from 817 repositories. A second wave surfaced in October 2026. On October 8, two maintainer accounts were used to push malicious workflows to 345 repositories in two automated windows: 27 repositories from one account, and 318 from another in a 16-minute span. Socket later reported that more than 500 GitHub accounts had committed the workflow to tens of thousands of repositories since October 7.

Stock photo related to hacking, cyber, blackandwhite, crime for the topic of hacker dark computer

The attacker most likely holds a maintainer's GitHub credentials, probably a personal access token from infostealer logs or a credential dump. With that access, the attacker scans workflow files for secret names, then pushes a workflow that looks like routine hygiene. The workflow triggers on workflow_dispatch and on unfiltered pushes, so it fires quickly. Read StepSecurity's GhostAction Returns analysis for the full indicator list.

What does the malicious workflow do?

The workflow checks out the repository with full history, so fetch-depth: 0. A single "Audit" step then appends the repository's named secrets, scans the working tree for 13 credential patterns, and scans the entire git history for the same patterns. That means a key you committed and deleted years ago is still exposed. It also pairs AWS access key IDs with their secret keys by reading surrounding context.

Targets include AWS, Anthropic, OpenAI, and OpenRouter API keys, GitHub and GitLab tokens, SSH keys, Azure, DockerHub, and GHCR credentials, database and FTP logins, Google Cloud and Firebase keys, chat bot tokens, and Cloudflare, npm, and PyPI credentials. The data goes out through a curl call to 193.32.204.199 over plain HTTP. Because the destination is a raw IP, there is no DNS lookup for a domain-based filter to catch. The Hacker News report summarizes the mechanics.

How do you check whether you are affected?

Work through these steps in order. Each one narrows the question from "do I have the file" to "did it run."

  1. Search GitHub code for "AKIA_CTX_START" path:.github/workflows, for "c=monami", and for "193.32.204.199" path:.github/workflows. Repeat each query with org:your-org to cover your organization.
  2. List workflow files in every repository and look for security-audit.yml, github_actions_security.yml, and security-check.yml. Also check forks, since forks of infected repositories carry the file.
  3. Review your audit log for maintainer commits that add workflow files directly to default branches without a pull request. Commit messages seen in the campaign include "Add security audit workflow" and "Trigger security scan."
  4. Look for workflow_dispatch runs of a newly created audit workflow, and for rapid, unsigned commits across many repositories within minutes.
  5. Check runner and proxy egress logs for connections to 193.32.204.199 on ports 80 and 3000. If you use Harden-Runner, review its telemetry from early September 2026 forward.
Stock photo related to code, coding, computer, data for the topic of programmer reviewing code

Treat any completed run named "Security Audit" or "Github Actions Security" as confirmed exfiltration. StepSecurity confirmed one case in a run log where the attacker's server acknowledged receipt four seconds after the workflow started. A repository with the file but no completed run is lucky, but it is still compromised in the sense that the credential that pushed the file is out there.

What is new in the October wave?

Four changes make the October wave harder on defenders than the 2025 version. First, it harvests full git history with git log -p --all, so old mistakes count. Second, it pairs AWS key IDs with secret keys by capturing surrounding context. Third, it adds AI-provider keys to its target list. Fourth, it sends data to a raw IP over plain HTTP, which avoids domain-based controls.

StepSecurity's count as of October 9 gives a sense of scale. It found 378 repositories with a live malicious workflow on the default branch, 182 with the history-mining marker, and 88 with the marker showing named secrets were sent. Those are a floor, not a ceiling, since the count covers only public repositories the researchers could see. GitGuardian separately tracked an earlier wave between August 31 and September 30, 2026, covering 772 public repositories and 2,577 targeted secrets.

One more detail helps with triage. The compromised accounts were used for injection, not owned by the attacker. If you see a commit from a trusted maintainer that adds a workflow file nobody discussed, the account holder is a victim, and the first call should be to them, not to a block list.

What is the right cleanup order?

Order matters, because rotating secrets while the attacker still holds a valid token only restarts the clock. Follow this sequence.

  1. Revoke the compromised GitHub credential, which is usually a personal access token or session, so the attacker cannot push again.
  2. Delete the malicious workflow from every branch, not just the default branch.
  3. Rotate all Actions secrets and every credential ever committed to any branch. Deleting a secret from the current tree does nothing for history.
  4. Audit workflow runs since August 31, 2026, the start of the earlier wave.
  5. Pause releases until the repository is clean. If PyPI, npm, crates.io, or container registry credentials were configured, assume they are compromised.

The publishing point deserves emphasis. As of the October 9 reports, no malicious package releases had been observed from the stolen credentials. StepSecurity warned that the absence of abuse so far is not evidence the credentials are safe. The pattern we covered in the LiteLLM 1.107.0 compromise shows how a stolen publishing path turns a secret leak into a package compromise.

Close-up of server racks in a data center highlighting modern technology infrastructure.

Which settings would have blunted the attack?

Five repository settings reduce the damage. None is exotic, and each is available in standard GitHub plans.

  • Require approval for workflow runs. StepSecurity observed this as the one control that stopped exfiltration in this campaign, in a case involving the typecho-fans/plugins repository.
  • Protect the workflows folder. Use branch protection or a code owners rule so any change to .github/workflows/* needs a reviewed pull request.
  • Block direct pushes to default branches for maintainers too, so a stolen token cannot write straight to main.
  • Set the default GITHUB_TOKEN to read-only and grant write permissions per job.
  • Restrict runner egress with an allowlist, so a job cannot call an unknown IP address.

Pair those controls with lockfile-style pinning. Our how-to on GitHub Actions workflow lockfiles shows how to pin dependencies so a workflow cannot quietly change under you. Pinning does not stop a stolen maintainer token, but it narrows what an attacker can alter without a visible diff.

What if your own tokens may be exposed?

Start by shrinking the blast radius of every personal access token. Replace classic tokens with fine-grained ones scoped to specific repositories, set short expirations, and remove any token you no longer use. Check infostealer exposure by rotating credentials on any machine that may have been infected, because the initial theft likely happened there, not on GitHub.

Then add a signal for the next incident. Alert on workflow files created outside a pull request, and alert on commits to many repositories from one account within minutes. Those two rules would have flagged both October 8 windows. For a related case, see how the Shai-Hulud and Tensorlake npm compromise response handled credential rotation at scale. At Backtrace, we treat any unexpected workflow file as an incident until proven otherwise.

Finally, write the incident down. Record which repositories held the file, which secrets they could reach, and when each was rotated. A short log helps your auditors, and it helps the next on-call engineer answer whether a given key is safe to trust again.

Conclusion

GhostAction works because teams trust a workflow that looks like a security check. The defense is plain: search for the known files and markers, find out whether they ran, revoke the stolen token first, and rotate everything that history could expose. Then add approval gates, a protected workflows folder, and egress limits so a stolen token cannot do the same thing again.

Do the search tonight, across every organization you own. It takes minutes, and the cost of finding out later is a leaked production key.

What is the GhostAction campaign?
GhostAction is a supply chain campaign that uses stolen maintainer credentials to push a fake security-audit workflow into GitHub repositories. The workflow reads repository secrets, scans git history for credentials, and sends them to an attacker's server over plain HTTP.
How can I tell if my repository has the GhostAction workflow?
Search your repositories for workflow files named security-audit.yml, github_actions_security.yml, or security-check.yml, and for the markers AKIA_CTX_START, c=monami, and the IP address 193.32.204.199. Check forks too, since forks of infected repositories inherit the file.
Do I need to rotate secrets I already deleted from the repo?
Yes. The workflow scans the full git history, so a credential committed and later deleted can still be found and stolen. Rotate every credential ever committed to any branch, plus all Actions secrets, after you revoke the compromised GitHub token.
Which GitHub settings help prevent this attack?
Require approval for workflow runs, protect the workflows folder with reviewed pull requests, block direct pushes to default branches, set the default GITHUB_TOKEN to read-only, and restrict runner egress to an allowlist. StepSecurity saw run approval stop exfiltration in one case.

Written by

Marcus Oyelaran

Security & DevOps Specialist

11+ years experience

Marcus Oyelaran spent eleven years moving between platform and security teams, including four years as a security engineer embedded inside a DevOps org at a healthcare SaaS company handling PHI at scale. He's run more incident postmortems than he can count, and most of what he writes for Backtrace comes directly out of those postmortems: the secret that leaked through a build log, the IAM policy that was too permissive by one wildcard, the deploy that skipped a gate because someone was in a hurry. He holds an OSCP and spends an unreasonable amount of time arguing about supply chain security on internal Slack channels.

Credentials

  • OSCP (Offensive Security Certified Professional)
  • 11 years in DevOps and security engineering
  • Former security engineer, healthcare SaaS platform (HIPAA-regulated infrastructure)