Article
How a Trivy Compromise Reached LiteLLM Releases
LiteLLM says a Trivy compromise in its build pipeline led to bad PyPI releases. Sources differ on exposure time. See what to ask about…
Quick links
Press Enter to search, Esc to close
Significant cyber incident
In short
In March 2026 an attacker used stolen credentials to publish a malicious version of the Trivy security scanner and to replace the tags of two of its GitHub Actions with credential-stealing code. Anyone whose build pipeline ran them on 19 and 20 March 2026 had to treat its secrets as exposed. CISA listed the Trivy compromise as exploited.
On 19 March 2026 an attacker used compromised credentials to publish a malicious Trivy v0.69.4 release. The attacker also moved 76 of the 77 version tags of the trivy-action GitHub Action, and all 7 tags of the setup-trivy action, to malicious code. On 22 March malicious Trivy v0.69.5 and v0.69.6 images appeared on Docker Hub.
Aqua Security, which maintains Trivy, says the attack continued one that began in late February 2026. Its first clean-up, after the 1 March disclosure, rotated credentials but not all at once, so the attacker may have kept access.
CISA added the issue, CVE-2026-33634, to its Known Exploited Vulnerabilities catalog on 26 March 2026. LiteLLM, a separate project, says it believes its own later compromise came from the Trivy dependency in its build scanning. See also the LiteLLM PyPI package compromise, which CERT-EU’s Cyber Brief of 1 April 2026 names in the same TeamPCP activity.
Aqua Security says an attack on the Trivy project begins.
Aqua discloses an incident in which credentials were stolen. Credential rotation is not done all at once.
First malicious activity seen at 17:43 UTC. Malicious Trivy v0.69.4, trivy-action tags and setup-trivy tags are published.
CERT-EU says an AWS key was obtained from the European Commission through the compromised Trivy.
Aqua posts its public incident discussion. The trivy-action exposure window ends at about 05:40 UTC.
Malicious Trivy v0.69.5 and v0.69.6 images appear on Docker Hub.
The CVE record for CVE-2026-33634 is published.
The European Commission security center sees alerts about odd Amazon API use. LiteLLM's bad PyPI versions are live for about 40 minutes.
The European Commission notifies CERT-EU.
CISA adds CVE-2026-33634 to its Known Exploited Vulnerabilities catalog. The German BSI and the Canadian Centre for Cyber Security issue warnings.
The European Commission publicly discloses its incident in a press release.
The group ShinyHunters publishes the stolen Commission data on its leak site.
CERT-EU publishes its blog post on the Commission breach.
Aqua Security says the 19 March attack followed the late February and 1 March incident. Rotation of secrets after that incident was not atomic, so the attacker may have seen the new tokens.
The attacker pushed a commit that swapped the checkout step for a look-alike commit. That commit pulled malicious Go source files from a typosquatted domain. The result was Trivy v0.69.4, sent out through GitHub, container registries, deb and rpm packages, and get.trivy.dev. The malicious code was not on the main branch. This is Supply Chain Compromise: Compromise Software Supply Chain (T1195.002), as CERT-EU lists it.
The attacker force-pushed 76 of 77 trivy-action tags and all 7 setup-trivy tags to malicious commits. Pipelines that referenced a tag, not a full commit hash, ran the stealer before the real scan.
The code searched more than 50 file paths for SSH keys, cloud credentials, Kubernetes tokens and Docker configs. It encrypted the data and sent it to attacker infrastructure. If that failed, it could upload the data as a release asset in a public repository on the victim’s own GitHub account.
CERT-EU describes one case. An AWS key taken on 19 March was used to run TruffleHog, add a new access key to an existing user and take data. CERT-EU lists Compromise Accounts: Cloud Accounts (T1586.003), Valid Accounts: Cloud Accounts (T1078.004) and Data from Local System (T1005) for the case.
Who attributed it, and how firm it is
Attributed by CERT-EU, 2 April 2026, to a threat actor known as TeamPCP, noting this was a public attribution made by Aqua Security. The German BSI, 26 March 2026, says the group TeamPCP is said to be behind the attacks. CERT-EU's Cyber Brief of 1 April 2026 calls TeamPCP a cybercrime actor. Separately, CERT-EU says the data extortion group ShinyHunters published the stolen European Commission data on 28 March 2026. No source opened here says the two groups are the same.
Aqua Security lists exposure windows: Trivy v0.69.4 for about 3 hours on 19 March, trivy-action for about 12 hours, setup-trivy for about 4 hours, and Docker Hub images 0.69.5 and 0.69.6 for about 10 hours from 22 March. Anyone whose pipeline ran them had to treat secrets as exposed. CISA says the issue is exploited. The German BSI says it received a number of compromise reports and that, as it knew then, no data had leaked in those cases. CERT-EU reports that about 91.7 GB of compressed data was taken from a European Commission cloud account, covering hosting clients including 42 Commission clients and at least 29 other EU entities. It confirmed personal data such as names and email addresses. The Commission said its internal systems were not affected. Number of other victims: not stated in the sources opened.
Tags can be moved. 76 of 77 trivy-action tags were moved to malicious code, while the one release protected by GitHub immutable releases was not affected.
Aqua says its first clean-up rotated credentials but not atomically, and the attacker may have used that gap to return on 19 March.
The scanner ran inside build pipelines with access to secrets, so a poisoned copy could reach many organizations.
The stealer looked for SSH keys, cloud credentials and tokens, and one stolen AWS key led to a data breach at the European Commission.
CERT-EU says the Commission received the compromised Trivy through normal software update channels.
LiteLLM says it believes its own compromise came from the Trivy dependency in its build scanning.
Search build logs for runs of trivy-action or setup-trivy on 19 and 20 March 2026, and for Trivy v0.69.4, 0.69.5 or 0.69.6 on any host or registry.
List every workflow that references an action by tag and change it to a full commit hash, as Aqua recommends.
If a bad version ran, treat all secrets reachable by that pipeline as exposed and rotate them together, not one by one.
Search your GitHub organization for repositories named tpcp-docs, which Aqua says may show the fallback upload was used.
Review AWS access keys reachable from pipelines, and CloudTrail for odd token calls, new access keys on existing users and TruffleHog use, as CERT-EU advises.
Check proxy and DNS logs for the domain and IP address Aqua published as command and control.
Threat intelligence monitoring can watch for your credentials appearing outside your control, for new alerts such as the CISA catalog entry on 26 March, and for named groups or compromised packages your pipelines use. It may have given earlier notice here, but there is no guarantee.
It is the identifier for the Trivy supply chain compromise. CISA lists it as an embedded malicious code vulnerability in its Known Exploited Vulnerabilities catalog, added 26 March 2026.
The CVE record lists Trivy 0.69.2 and 0.69.3, trivy-action 0.35.0 and setup-trivy 0.2.6.
Aqua says the malicious code was not committed to the main branch. It was fetched and built on a temporary runner.
CERT-EU says the compromise was publicly attributed to TeamPCP by Aqua Security. The BSI says the group is said to be behind it.
CERT-EU says the Commission received the compromised Trivy through normal updates, and an AWS key was taken on 19 March.
LiteLLM says it believes its compromise originated from the Trivy dependency in its CI/CD scanning workflow.
Take control of your digital security with an exclusive demo of our AI-driven threat intelligence platform.