Secret Cyber Assault Unveiled: GitHub Action Vulnerability Under Siege

By John King, CISSP, PMP, CISM   Published: 03/21/25   Updated: 10/27/26   3 min read

Secret Cyber Assault Unveiled: GitHub Action Vulnerability Under Siege

The short version

How the tj-actions attack worked

On March 14, 2025, security researchers noticed that tj-actions/changed-files, an action used by more than 23,000 repositories to list the files changed in a pull request, was behaving oddly. Someone holding a token for the project’s bot account had pointed existing version tags at a malicious commit. Every workflow that pulled the action by tag ran it.

A tag is not a lock

The injected code dumped the memory of the CI runner and wrote secrets into the job log. In public repositories those logs are public, so access keys, GitHub personal access tokens, npm tokens and private RSA keys could be read by anyone. Workflows pinned to a full commit SHA kept running the code their owners had chosen.

Security researcher Adnan Khan pointed investigators toward reviewdog. Unit 42 later confirmed the chain: tj-actions used an action that depended on reviewdog/action-setup, which had itself been hijacked days earlier. The attacker tried Coinbase’s agentkit project first. Unit 42 said the attacker could not use Coinbase secrets or publish packages.

One dependency, thousands of pipelines

The incident shows how far trust stretches in the security of supply chains in open-source projects. One maintainer token, a few moved tags, and thousands of build pipelines ran code nobody had reviewed. The reviewdog actions action-shellcheck, action-composite-template, action-staticcheck, action-ast-grep and action-typos were also listed as possibly affected.

What maintainers and GitHub did

The malicious commits were reverted and the gist hosting the payload script was removed. tj-actions shipped a fixed release (CISA cites v46.0.1), and reviewdog rotated credentials and locked down its organization. CISA published guidance on March 18 and updated it as the investigation went on.

Teams that ran the action should audit workflow runs in the exposure window, check logs for secrets (they may appear double-encoded in base64), and rotate anything that leaked. Going forward, pin third-party actions to a commit SHA and give workflow tokens the least privilege they need.

Lessons for build pipelines

Version tags in GitHub Actions can be moved. That single fact made this attack possible.

Pinning, allow-lists for third-party actions and alerts on unexpected workflow changes would have stopped most of the damage. Many teams adopted them only after March 2025.

Where things stand

Both CVEs remain in CISA’s catalog of exploited vulnerabilities, and Unit 42’s write-up is the most detailed public account of how one stolen token turned into a mass secret leak.

If your repositories used either action, the fix is the same as on day one: find the runs, read the logs, rotate the secrets.

Stay Current

Newer CyberExperts coverage on this topic

This article still works as background. If you want the current picture, start with the freshest related coverage below and today's brief.

Latest Daily Brief

Friday’s brief: Apache’s HTTP/2 fix, then Check Point break-ins, a ScreenConnect add-on and a GitHub secret stealer

The fastest way to catch up on what changed after this article was published.

Read Today's Brief

John King, CISSP, PMP, CISM

John King currently works in the greater Los Angeles area as a ISSO (Information Systems Security Officer). John has a passion for learning and developing his cyber security skills through education, hands on work, and studying for IT certifications.