The GitHub Actions Vulnerability and Its Impact on CI/CD Security
The CVE-2025-30066 vulnerability represents a critical supply chain attack targeting the widely used GitHub Action tj-actions/changed-files
, which impacted over 23,000 repositories. This incident underscores the growing risks in open-source ecosystems and CI/CD pipelines. Below is a detailed analysis of the vulnerability, its impact, and mitigation strategies.
Vulnerability Overview
CVE-2025-30066 (CVSS 8.6) involves a malicious code injection into the tj-actions/changed-files
GitHub Action, which is used to track file changes in pull requests. Attackers retroactively modified version tags (v1 to v45.0.7) to reference a malicious commit (0e58ed8
) on March 12–14, 2025. The compromised code dumped CI/CD secrets—such as AWS keys, GitHub Personal Access Tokens (PATs), and npm tokens—into build logs, risking exposure if logs were publicly accessible.
Technical Analysis
Attack Mechanism
- Code Injection: A Node.js function with base64-encoded payloads was inserted into the action. When executed, it decoded and ran a Python script to scan the GitHub Runner’s memory for credentials.
Exfiltration Methods:
- Log Exposure: Secrets were printed in workflow logs as double-encoded base64 strings.
- Gist Exfiltration: In a variant observed in the Flank project, stolen data was sent via POST requests to GitHub Gists.
Affected Components
- Versions: All tags up to v45.0.7.
- Compromise Window: March 12–15, 2025.
Impact Assessment
Direct Consequences
- Secret Leakage: Credentials stored in environment variables or accessed during workflows could be exposed.
- Supply Chain Risk: Over 1 million monthly downloads of the action amplified the attack’s reach.
- Operational Disruption: The repository was temporarily unavailable, halting legitimate usage.
Secondary Risks
- Public Log Exposure: Public repositories faced heightened risk if logs were not restricted.
- Cache Persistence: Malicious versions might persist in GitHub Actions’ dependency caches.
Mitigation Strategies
Immediate Actions
- Update the Action: Upgrade to v46 or later, as earlier versions are compromised.
- Rotate Secrets: Regenerate all credentials exposed during the compromise window.
Audit Workflows:
- Search for
tj-actions/changed-files
in workflow YAML files.- Inspect logs from March 12–15 for base64 strings or unusual activity.
Long-Term Defenses
Pin Actions to Commits: Avoid using mutable tags; reference immutable commit hashes.
- Restrict Log Visibility: Limit access to CI/CD logs, especially for public repos.
- Implement Runtime Security: Tools like Sweet Security can detect memory dumping or anomalous network traffic in real time.
Sample Attack Scenario
Case Study: Compromised Public Repository
Initial Compromise: A developer updates
tj-actions/changed-files
to v45.0.0 in a public repository.Malicious Execution: During the next pull request, the action runs the injected code, printing AWS keys into the workflow log.
Exploitation: An attacker scans public logs, extracts the keys, and gains unauthorized access to cloud resources.
Detection: The team notices anomalous activity in AWS and traces it back to the leaked credentials.
Broader Implications
This incident highlights systemic vulnerabilities in software supply chains:
- Dependency Risks: Even trusted open-source tools can become attack vectors.
- CI/CD Security Gaps: Traditional "shift-left" practices fail to detect runtime threats like memory scraping.
- Need for Zero Trust: Organizations must assume dependencies are compromised and enforce granular access controls.
For developers, proactive measures like auditing dependencies, scoping CI secrets, and conducting incident-response drills are critical to mitigating future attacks
Real-World Impact and Examples
While specific real-world examples of CVE-2025-30066 are not detailed in the search results, the impact of this vulnerability is significant due to its widespread use in CI/CD pipelines. Here are some insights into how it could affect real-world scenarios:
Real-World Impact and Examples
Affected Repositories: Over 23,000 GitHub repositories were potentially impacted by this vulnerability, as they used the compromised
tj-actions/changed-files
action. This highlights the scale of potential exposure.Secret Leakage: The malicious code injected into the action was designed to extract and log sensitive secrets, such as AWS access keys, GitHub Personal Access Tokens (PATs), and npm tokens. If these logs were publicly accessible, attackers could exploit them to gain unauthorized access to cloud resources, repositories, or package registries.
CI/CD Pipeline Compromise: The exposure of secrets could lead to the compromise of CI/CD pipelines, allowing attackers to inject malicious code, steal data, or disrupt services.
Public Log Exposure: For open-source projects with public workflow logs, the risk of secret exposure is particularly high. Attackers could scan these logs for encoded secrets without needing to exfiltrate data externally.
Prior Vulnerabilities: The
tj-actions/changed-files
action had previous security issues, such as CVE-2023-51664, which allowed command injection. This history underscores the ongoing risks associated with widely used CI/CD tools
- https://nvd.nist.gov/