Open Source ·

actions-cool GitHub Actions tags rewritten by TeamPCP

TeamPCP re-pointed all 53 issues-helper tags and all 15 maintain-one-comment tags to a single dangling imposter commit on 2026-05-18. The injected step downloaded Bun, scraped Runner.Worker memory for masked secrets, and exfiltrated them to t.m-kosche.com.

Part of Shai-Hulud hits npm and PyPI campaign

On the evening of May 18, 2026, an attacker calling itself TeamPCP quietly rewrote every version tag on two widely used GitHub Actions, redirecting thousands of automated workflows to malicious code designed to steal whatever secrets the runner could touch.

The targets, actions-cool/issues-helper and actions-cool/maintain-one-comment, handle routine issue and comment triage. Issues-helper alone was referenced by roughly 3,000 public workflow configurations at the time of the compromise, according to the cloud security firm StepSecurity, which published the first detailed account of the incident. Between 19:10:24 and 19:13:40 UTC, the attacker re-pointed all 53 version tags on issues-helper to attacker-controlled commits, a distinct one for each tag, and all 15 tags on maintain-one-comment moved within a 39-second window. Tag v3.8.0 was moved to commit 1c9e803c80cc7fed000022d4c94f4b5bc2e90062, and v3.3.0 on maintain-one-comment to 7f6120bb10c870b9fde146961a18e5bf0b3d4401. The destination commits, labeled "Build action for vX.Y.Z" to mimic a normal release marker, were orphans: they sat on no branch and could only be reached through the rewritten tags. Workflows that pinned the actions by tag would pick up the malicious code on their next run. Workflows that pinned by full commit SHA were unaffected.

The malicious action.yaml step downloaded the Bun JavaScript runtime to /home/runner/.bun/bin/bun, then spawned a Python process that read /proc/<PID>/mem of the GitHub Actions Runner.Worker process, the part of the runner that holds workflow secrets in decrypted form. StepSecurity researchers said the script filtered runner memory for the "isSecret":true marker that GitHub uses to flag protected values, extracted the workflow's GITHUB_TOKEN, ran gh auth token as a backup, and used sudo python3 where passwordless sudo was permitted. Everything went out over HTTPS to t.m-kosche.com, a domain the same attacker used the same day in the @antv npm wave, the durabletask PyPI publish, and the Nx Console extension compromise.

StepSecurity said its Harden-Runner product caught the imposter commits and the runner-memory reads in real time, added the C2 host to a global block list, and shipped a policy to keep customers from executing the affected refs. GitHub subsequently disabled both repositories outright, an unusual step that suggests it treated the entire actions-cool namespace as untrusted; that blocks the malicious tags from new clones but does not retroactively protect workflows that already cached the bad commit SHAs. The incident appears to have been the opening move in a 24-hour spree the security firm Wiz later attributed to TeamPCP, running about five hours before the @antv npm wave began at 01:56 UTC the following morning. The Actions tokens harvested here are a plausible source of the credentials that fed the same-day compromises tracked separately as [[nx-console]] and [[durabletask-pypi]]. The cross-ecosystem aggregate sits on [[shai-hulud-here-we-go-again]]; this record holds the GitHub Actions evidence.

Notes

  • All 53 issues-helper tags were re-pointed between 19:10:24 and 19:13:40 UTC on 2026-05-18 to 1c9e803c80cc7fed000022d4c94f4b5bc2e90062; the 15 maintain-one-comment tags moved within 39 seconds to imposter commit 7f6120bb10c870b9fde1469.
  • Workflows pinning either action by full commit SHA were unaffected; only tag-pinned consumers picked up the malicious code on their next run. Roughly 3,000 public repositories referenced issues-helper at the time.
  • GitHub disabled both repositories, so the imposter commits could not be fetched afterwards. The retained sample is a report-derived indicator trace, not reconstructed source.
  • The t.m-kosche.com C2 is shared with the same-week TeamPCP operations against @antv npm packages (see [[antv-npm]]), the Nx Console VS Code extension (see [[nx-console]]), and Microsoft's durabletask PyPI package (see [[durabletask-pypi]]).

Appendix · Affected releases

actions-cool/issues-helper github actions
  • All 53 version tags from v1.0.0 through v3.8.0 were re-pointed to the imposter commit. GitHub later disabled the repository.
  • The affected releases were recorded as a wildcard rather than enumerated, so this record asserts no version list.
actions-cool/maintain-one-comment github actions
  • All 15 version tags were re-pointed to the distinct imposter commit 7f6120bb10c870b9fde146961a18e5bf0b3d4401. GitHub later disabled the repository.
  • The affected releases were recorded as a wildcard rather than enumerated, so this record asserts no version list.

Indicators

References

  1. actions-cool/issues-helper GitHub Action Compromised - All Tags Point to Imposter Commit That Exfiltrates CI/CD Credentials - StepSecuritystepsecurity.io
  2. Compromised GitHub Action Exfiltrates Workflow Credentials - Cyber Security Newscybersecuritynews.com
  3. Popular GitHub Action Tags Redirected to Imposter Commit to Steal CI/CD Credentials - The Hacker Newsthehackernews.com
  4. TeamPCP: GitHub Action Scanning, Pinning, and Version Management - Puma Securitypumasecurity.io

Source record: oss/attacks/actions-cool/meta.yaml