supply chain attack

GitHub Action tag hijack turns CI/CD runs into credential theft

Lucas OliveiraLucas OliveiraResearch
May 19, 2026·6 min read
GitHub Action tag hijack turns CI/CD runs into credential theft

A fresh GitHub Actions supply chain incident is a good reminder that "pinned" does not mean safe if teams are pinning to mutable version tags instead of immutable commit SHAs. StepSecurity says the actions-cool/issues-helper action was altered so that every existing tag now resolves to an imposter commit containing code that steals secrets from CI/CD runners.

That changes the operational question for defenders. This is not just a bad package release or a one-off repository cleanup issue. It is a trust failure in a build dependency that can turn routine workflow runs into a path for credential theft, secret exposure, and follow-on compromise across repositories that inherited the poisoned tags.

What happened

According to StepSecurity, the actions-cool/issues-helper repository had all published tags redirected to an imposter commit that does not appear in the project's normal commit history. The malicious workflow code reportedly downloads the Bun JavaScript runtime, reads memory from the Runner.Worker process, and sends stolen data to the attacker-controlled domain t.m-kosche[.]com.

StepSecurity also says a second action, actions-cool/maintain-one-comment, had 15 tags compromised with the same behavior. GitHub has since disabled both repositories, which is an important containment signal but not a full fix for organizations that already ran affected workflows before the takedown.

The practical risk is straightforward: any workflow that referenced one of those actions by tag could fetch attacker-controlled code on its next run. StepSecurity notes that only workflows pinned to a known-good full commit SHA were unaffected.

Why this matters more than the repo takedown

The interesting part of this case is not only that a GitHub Action was compromised. It is that version-tag trust let the compromise spread into normal automation behavior.

Many teams think of @v1 or @v2 style references as controlled releases. They are convenient, but they are still mutable. If the tag moves, the trust boundary moves with it. In a CI/CD environment, that can expose repository secrets, cloud credentials, package publishing tokens, and signing material in a place where attackers can move very quickly.

That is why GitHub's own security guidance matters here: pinning third-party actions to a full-length commit SHA is the only way to treat an action version as immutable. This incident shows the difference in plain operational terms.

What the attacker appears to be after

Based on the public reporting, the goal was not noisy disruption. It was quiet access to pipeline secrets and build context.

That makes this a high-value malware and incident response problem because CI/CD systems often hold:

  • GitHub tokens with repository write access
  • package registry credentials
  • cloud deployment secrets
  • signing keys or release credentials
  • internal API tokens used during build and release steps

If an attacker can extract those values from a runner, they may not need to stay inside the original action at all. The pipeline becomes the first compromise point, and the real damage can happen later through source tampering, package publishing abuse, or malicious infrastructure access.

Operational impact for defenders

1. Mutable tags are a supply chain blind spot

Teams often review action names, vendor reputation, and workflow permissions, then stop there. But if a third-party action is referenced by tag, the dependency can still change underneath an approved workflow.

2. CI/CD secrets are more powerful than many teams realize

Build runners are not just temporary automation workers. They often sit on a privileged path between source code, artifact registries, deployment systems, and production environments. A pipeline secret leak can become a wider lateral movement opportunity.

3. Takedown does not eliminate retrospective exposure

GitHub disabling the affected repositories reduces ongoing pull risk, but it does not tell you whether one of your workflows already ran the malicious revision, whether tokens were accessed, or whether those tokens were later used elsewhere.

What defenders should do now

1. Identify workflows that referenced the affected actions

Search for both of these references across your repositories and workflow templates:

  • actions-cool/issues-helper
  • actions-cool/maintain-one-comment

Do not limit the check to default branches. Include internal templates, archived repositories that still have active automation, and organization-wide starter workflows.

2. Treat tag-based references as potentially exposed

If any workflow used these actions by tag rather than a known-good full commit SHA, assume that run context may have been exposed. That includes the built-in GITHUB_TOKEN, repository or organization secrets, package credentials, cloud tokens, and any environment secrets made available to the job.

3. Rotate secrets fast

Secret rotation is the most important response step because memory-scraping behavior is designed to leave defenders debating evidence quality while attackers already use the stolen access.

Prioritize rotation for:

  • repository and organization GitHub tokens
  • package publishing credentials
  • cloud deployment credentials
  • signing keys and release automation secrets
  • any external API keys used in affected workflows

4. Review runner and workflow logs for unusual outbound access

The public reporting points to t.m-kosche[.]com as an exfiltration domain. Hunt for outbound connections, DNS lookups, or job artifacts that mention that domain or unexpected Bun downloads during workflow execution.

Example GitHub Actions log triage pattern:

text
- unexpected Bun runtime download in a job that never used Bun before
- network requests to unfamiliar external domains during action setup
- workflow steps that completed successfully but performed extra HTTP or DNS activity

Example Splunk hunt idea:

spl
index=github_actions_logs ("actions-cool/issues-helper" OR "actions-cool/maintain-one-comment" OR "t.m-kosche.com" OR "bun")
| stats count by repo, workflow, actor, _time

5. Tighten future GitHub Actions usage

This incident reinforces a few good defaults from GitHub's secure use guidance:

  • pin third-party actions to full-length commit SHAs
  • reduce GITHUB_TOKEN permissions to the minimum required
  • avoid exposing sensitive secrets to jobs that do not need them
  • require reviews for high-risk environment secrets when possible
  • keep an inventory of third-party actions used across the organization

Strategic takeaway

The real lesson here is not "GitHub Actions are unsafe." The lesson is that dependency trust inside CI/CD is still code execution trust, and mutable tags are too weak for high-confidence automation.

When a third-party action sits inside an approval, release, or deployment path, it should be treated like privileged code. If teams keep using tag-based references for convenience, attackers only need one compromised action to turn normal developer workflows into a secret collection point.

For security teams, the practical response is clear:

  • find every workflow that used the affected actions
  • rotate anything that could have been available to those runs
  • pin third-party actions to immutable SHAs
  • audit other tag-pinned actions before the next incident makes the decision for you

Why is this GitHub Actions incident important?

Because the compromise targets CI/CD trust. A poisoned action can run inside build pipelines that already have access to repository secrets, deployment credentials, and release automation.

Were all users of the affected actions exposed?

Not necessarily. StepSecurity says workflows pinned to known-good full commit SHAs were not affected. The main risk is for workflows that referenced the actions by mutable tags.

Is disabling the repository enough?

No. Repository takedown helps stop future pulls, but defenders still need to determine whether affected workflows already ran and whether secrets available to those runs now require rotation.

What is the safest way to use third-party GitHub Actions?

GitHub's own guidance says pinning an action to a full-length commit SHA is the only immutable release option. That should be paired with least-privilege token permissions and tight secret scoping.

References

  1. StepSecurity: actions-cool/issues-helper GitHub Action Compromised
  2. GitHub repository status: actions-cool/issues-helper
  3. GitHub repository status: actions-cool/maintain-one-comment
  4. GitHub secure use reference for Actions
  5. The Hacker News coverage

Written by

Lucas Oliveira

Research

A DevOps engineer and cybersecurity enthusiast with a passion for uncovering the latest in zero-day exploits, automation, and emerging tech. I write to share real-world insights from the trenches of IT and security, aiming to make complex topics more accessible and actionable. Whether I’m building tools, tracking threat actors, or experimenting with AI workflows, I’m always exploring new ways to stay one step ahead in today’s fast-moving digital landscape.