Home/ Blog/ Security news/ Article
Blog · Security news

A poisoned Trivy scanner, not LiteLLM, exposed 2,500 organizations' CI/CD secrets

CloudSEK maps 2,500+ organizations exposed by the TeamPCP (UNC6780) supply-chain campaign.

Inspection lens over a conveyor of crates, one crate split open leaking small keys

The wire headlines this week say two malicious LiteLLM packages exposed thousands of organizations. That framing is backwards, and getting it wrong will cause teams to under-scope their response. The LiteLLM releases were downstream casualties. They sat on PyPI for roughly 40 minutes. The breach that actually mattered happened five days earlier, inside the build pipeline of Trivy, the container scanner from Aqua Security that runs in an enormous number of continuous-integration jobs. If your only question after reading the news is "did we install a bad LiteLLM version," you are looking at the wrong door.

New analysis from threat-intelligence firm CloudSEK reconstructs the campaign's reach from roughly 434,000 captured CI/CD files and puts the potential-exposure count north of 2,500 organizations, a list that reportedly includes NVIDIA, Cisco, Deloitte, Volkswagen, FedEx, and Siemens. We covered the FBI's TeamPCP alert in July, when the confirmed tally sat near 1,000. The mapped blast radius has since more than doubled, and the actor now carries a formal designation: Google's threat group labels it UNC6780 and rates it financially motivated.

How a scanner breach became a 2,500-org exposureMar 19: Trivy compromised. Mar 24: LiteLLM pkgs, 40 min. Mar 26: Added to CISA KEV. Aug 2026: CloudSEK maps 2,500.How a scanner breach became a 2,500-org exposureMar 19TrivycompromisedMar 24LiteLLM pkgs, 40minMar 26Added to CISAKEVAug 2026CloudSEK maps2,500
Sources: CloudSEK, Google GTIG (UNC6780), CISA KEV, SANS ISC.

What actually happened, in order

On March 19, the actor pushed tainted binaries into Trivy releases, beginning at v0.69.4, using leftover access from an earlier intrusion that the vendor had never fully closed out. The flaw is tracked as CVE-2026-33634 at CVSS 9.4, and CISA added it to its Known Exploited Vulnerabilities catalog on March 26. The planted payload was a credential stealer researchers call SANDCLOCK, written to hide its work inside normal-looking telemetry: it wrapped stolen secrets in outbound requests aimed at domains dressed up to resemble monitoring endpoints. SANS Internet Storm Center's tracking put the number of directly exposed pipeline executions above 10,000 across the March 19 to 24 window.

The LiteLLM compromise was a second-order effect of the first. A poisoned Trivy run inside LiteLLM's own pipeline lifted LiteLLM's PyPI publishing token. The actor used that token to push two backdoored releases, 1.82.7 and 1.82.8, on March 24 from 10:39 UTC. According to The Hacker News, PyPI quarantined them after about 40 minutes, and researchers say to treat anything pulled that day before 16:00 UTC as potentially tainted. Those releases went beyond simple credential theft: they also bundled tooling to move laterally through Kubernetes and a backdoor for staying resident, and shipped what they stole to an attacker domain, models.litellm[.]cloud.

So the "malicious LiteLLM" story is real but small. By SecurityWeek's account, the great majority of victims, upward of 95%, had already been hit by the time those LiteLLM releases went up at all. The population that installed a backdoored LiteLLM in a 40-minute window is a subset. The population that ran a poisoned Trivy scan in CI over a five-day window is the story.

What the 2,500 number is, and what it is not

The reconstructed blast radius
2,500+
organizations mapped
potential exposure, not confirmed breach
434,000
captured CI/CD files
40 min
LiteLLM packages live on PyPI
Source: CloudSEK dataset of captured CI/CD artifacts, August 2026.

Read the 434,000 files and 2,500 organizations as reconstructed exposure, not a roster of confirmed breaches. CloudSEK assembled the map out of captured CI runner logs, then attributed each artifact to an organization using the fingerprints those logs carry, mainly the runner's host identity and the real committer domains that showed up in them. A company lands on the list because its build logs were scooped up, not because anyone has demonstrated its cloud account was emptied. CloudSEK is explicit that the totals describe potential exposure and that every case still needs to be checked on its own.

That nuance cuts the wrong way for most defenders, though. If your organization is in a dataset of captured CI/CD artifacts, the secrets in those artifacts, your cloud access keys, SSH keys, Kubernetes ServiceAccount tokens, and build-time environment variables, are in the actor's hands and remain valid until you rotate them. "It is only potential exposure" is not a reason to wait. Treat presence in the data as confirmation that rotation is overdue, not as an all-clear.

Who should actually be scoping a response

Here is the practical correction to the headline. The teams most exposed are the ones that ran Trivy as a GitHub Action in CI between March 19 and March 24, whether or not they have ever used LiteLLM. A LiteLLM-framed advisory tells those teams nothing, and some will close the ticket thinking it does not apply. Widen the question:

  • Did a Trivy action run in any pipeline in that window? If yes, assume every secret that job could read was captured. Aqua's action is the common denominator, not the AI library.

  • Did you pull LiteLLM 1.82.7 or 1.82.8 on March 24? That is the narrow, second exposure. If yes, you also inherit a Kubernetes toolkit and a backdoor, so the cleanup is host-level, not just a version bump.

  • Did any downstream image or dependency pin an affected release? The token theft shows how one poisoned build seeds the next. Check what your builds pulled transitively, not just what you named directly.

Patching the scanner does not evict what already leaked

CVE-2026-33634 on the KEV list tells you to update Trivy and pin your actions. Useful, and it closes the delivery route. It does nothing about the credentials captured in March, which stay usable until rotated. This is the recurring lesson of build-pipeline theft: the fix and the recovery are two separate jobs. Even the release delays PyPI and GitHub added only slow a poisoned package; they do nothing for secrets already taken. Update the tooling to stop the next release, then rotate every secret those jobs could reach and move to short-lived credentials so a captured token expires on its own. Detection matters as much as patching here, because the theft looked like telemetry. The signal to hunt for is a CI job reading credential files or environment secrets and then making outbound requests to an unfamiliar host, not a known-bad hash.

The reusable root cause: mutable tags

Strip away the brand names and this is a mutable-reference problem. Trivy's GitHub Action was referenced by a moving tag, so anyone who could push a commit and repoint that tag reached every pipeline that ran the action on its next execution. That is the same weakness behind the 2025 tj-actions/changed-files compromise and the sort of GitHub Actions takeover we have written about before, and it will keep working until teams stop trusting tags for third-party actions. The single control that blunts this class is pinning every third-party action to a full commit SHA, not a tag or a major version. A SHA cannot be silently moved under you. Pair it with a build environment that holds only short-lived, least-privilege credentials, so a captured secret is worth little by the time an actor uses it.

What to do this week

If you run CI, treat this as today's work, not a watch item. Inventory whether Trivy ran in your pipelines during the March 19 to 24 window and, separately, whether any job pulled LiteLLM 1.82.7 or 1.82.8. For anything that matches, rotate cloud keys, SSH keys, Kubernetes tokens, and build-time secrets, and assume they already leaked. Then pin third-party actions to commit SHAs, cut credential lifetimes, and add a detection for build jobs that read secrets and phone out to an unfamiliar domain. The campaign kept expanding after the July alert. Scoping your response to the accurate vector is how you avoid being on the next update to the list.

Topics

Frequently asked questions

Was the LiteLLM or the Trivy compromise the bigger exposure?

The Trivy compromise was far bigger. According to SecurityWeek, over 95% of affected companies were exposed before the malicious LiteLLM packages published. A poisoned Trivy scanner ran in an estimated 10,000-plus CI/CD workflow runs over five days; the LiteLLM releases were live for about 40 minutes.

What is CVE-2026-33634?

CVE-2026-33634 is the vulnerability behind the Trivy supply-chain compromise, rated CVSS 9.4. Attackers abused mutable GitHub Actions tags to inject a credential stealer into Trivy releases. CISA added it to its Known Exploited Vulnerabilities catalog on March 26, 2026.

Does the CloudSEK list of 2,500 organizations mean they were all breached?

No. CloudSEK reconstructed potential exposure from about 434,000 captured CI/CD files, matching organizations by host identity and committer domains. A company appears because its build logs were captured, not because a breach is confirmed. Still, any secrets in those artifacts should be treated as compromised and rotated.

I ran Trivy in CI but never used LiteLLM. Am I affected?

Possibly, and this is the point most coverage misses. The primary vector was Trivy, not LiteLLM. If a Trivy GitHub Action ran in your pipelines between March 19 and 24, assume every secret those jobs could read was captured, and rotate cloud keys, SSH keys, and Kubernetes tokens regardless of whether you use LiteLLM.

What single control would have blunted this attack?

Pinning third-party GitHub Actions to a full commit SHA rather than a moving tag. The attackers repointed a mutable tag to reach every pipeline that ran the action, the same weakness behind the 2025 tj-actions/changed-files compromise. A commit SHA cannot be silently moved under you.

Is patching Trivy enough to recover?

No. Updating Trivy and pinning actions closes the delivery route but does nothing about secrets already captured in March, which stay valid until rotated. Recovery is a separate job: rotate every exposed credential, move to short-lived tokens, and hunt for CI jobs that read secrets and then contact unfamiliar domains.

Ready to meet the Guardians?

Deploys fast - agentless for monitoring and cloud, a lightweight agent for deep endpoint security. Just Suriq, standing watch.