Cloud Threat Landscape
  • Incidents
  • Actors
  • Techniques
  • Defenses
  • Tools
  • Targeted Technologies
  • Posters & Newspapers
  • About
  • RSS
  • STIX
  • Back to wiz.io
Cloud Threat Landscape

tj-actions/changed-files supply chain attack

Type
Incident
Actors
❓Unknown
Pub. date
March 15, 2025
Initial access
UnknownSupply chain vector
Impact
Supply chain attack
Observed techniques
Credential harvesting from code repository
Targeted technologies
GitHub
References
https://www.wiz.io/blog/github-action-tj-actions-changed-files-supply-chain-attack-cve-2025-30066https://www.stepsecurity.io/blog/harden-runner-detection-tj-actions-changed-files-action-is-compromisedhttps://semgrep.dev/blog/2025/popular-github-action-tj-actionschanged-files-is-compromised/https://www.wiz.io/blog/new-github-action-supply-chain-attack-reviewdog-action-setup
Status
Finalized
Last edited
Mar 19, 2025 12:12 PM

The compromised version of tj-actions/changed-files injects malicious code into CI workflows, potentially capturing and exposing secrets from affected repositories. On public repositories, the secrets would then be visible to everyone as part of the workflow logs, though obfuscated as a double-encoded base64 payload. As of now, no external exfiltration of secrets to an attacker-controlled server were observed; secrets were only observable within the affected repositories themselves. At the time of discovery, all versions of the Action were found to be affected. The compromise is also being tracked as a vulnerability, and has been assigned CVE-2025-30066.

The affected repository was taken down around 10:30AM UTC, March 15, 2024, and later restored with the offending commits removed. However, there is still a risk of Actions being cached and secrets that have already leaked.

Wiz Threat Research estimates that the attack likely originated from the compromise of the reviewdog/action-setup GitHub Action, where the v1 tag was temporarily pointed to a malicious commit on March 11, 2025. This action was used within tj-actions/eslint-changed-files, which, in turn, was executed by tj-actions/changed-files with a GitHub Personal Access Token (PAT). The attacker could have leveraged this dependency chain to inject a malicious payload, which extracted workflow secrets by encoding them in base64 and embedding them into logs. Unlike the tj-actions/changed-files compromise, this payload did not use curl for exfiltration but instead directly modified the install.sh script.

Made with 💙 by Wiz

Last Updated: April 3, 2025