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
On 24 March 2026, two malicious versions of LiteLLM (1.82.7 and 1.82.8), a widely used AI gateway package, were published to PyPI with a credential stealer that looked for SSH keys, cloud credentials and Kubernetes tokens. Anyone who installed an unpinned copy during the window had to treat their secrets as stolen. LiteLLM believes a compromised Trivy scanner was the entry point, but this is not confirmed.
On 24 March 2026, LiteLLM versions 1.82.7 and 1.82.8 appeared on PyPI. LiteLLM says they were not released through its normal build process. They contained code that steals credentials.
The packages were live from 10:39 UTC. LiteLLM says they were up for about 40 minutes, but the same post also defines the affected window as 10:39 to 16:00 UTC. PyPI reports a total exposure of 2 hours 32 minutes. Sources differ.
LiteLLM and PyPI both say the attacker got a publishing token after an exploited Trivy dependency. LiteLLM describes this as its belief, and its investigation was still marked active when last updated. A clean version, 1.83.0, followed on 30 March 2026.
LiteLLM says the malicious versions 1.82.7 and 1.82.8 went live on PyPI
A user opens a public GitHub issue reporting a malicious litellm_init.pth in 1.82.8
The PyPA advisory record PYSEC-2026-2 is last modified at this time
LiteLLM publishes its security update; PyPI quarantines the packages (LiteLLM: about 40 minutes live; PyPI: 2h 32m total exposure)
LiteLLM says the affected install window ends at 16:00 UTC
GitHub publishes advisory GHSA-5mg7-485q-xm76, rated critical, with no CVE
CISA adds the Trivy embedded malicious code flaw (CVE-2026-33634) to its KEV Catalog
LiteLLM adds SHA-256 checksums for audited clean releases
LiteLLM releases clean version 1.83.0 from a new CI/CD pipeline
CERT-EU's March Cyber Brief names TeamPCP as the actor behind the LiteLLM compromise
PyPI publishes its incident report on LiteLLM and telnyx
PyPI announces it rejects new files on releases older than 14 days
PyPI and the GitHub advisory say a publishing token was exposed through an exploited Trivy dependency. PyPI later said both projects were hit because of a mutable reference in their use of the Trivy GitHub Action. LiteLLM says it believes the compromise began with Trivy in its CI/CD security scanning. It also says the attacker bypassed its official workflows and uploaded straight to PyPI. This link to Trivy is LiteLLM’s belief and is not confirmed.
Supply Chain Compromise: Compromise Software Supply Chain (T1195.002) is the technique CERT-EU lists for the connected Trivy compromise.
Version 1.82.7 hid a malicious payload in proxy_server.py. Version 1.82.8 did that and also added a file called litellm_init.pth. The PyPA advisory says the code runs when any module of the package is imported. A public issue reporter said the .pth file runs on any Python start and that 1.82.7 looked clean to them. LiteLLM says both versions were affected, so sources differ on 1.82.7.
The code looked for environment variables, SSH keys, cloud provider credentials, Kubernetes tokens and database passwords. The PyPA advisory adds Git and Docker credentials, dotenv files, LDAP configuration, shell history and cryptowallet keys. It also tried to get cloud tokens from metadata servers and secrets from AWS Secrets Manager.
Data was encrypted and sent by POST to models.litellm[.]cloud, which is not a LiteLLM domain. The advisory describes a systemd service named “System Telemetry Service” for persistence, and a new pod in Kubernetes. The persistence script contacts a second attacker domain, listed in the advisory, for further instructions.
Who attributed it, and how firm it is
Attributed by CERT-EU, 1 April 2026 (Cyber Brief 26-04): the cybercrime actor TeamPCP compromised LiteLLM, Trivy and Telnyx packages. CERT-EU words the LiteLLM entry as "reportedly".
Attributed by CERT-EU, in its European Commission breach write-up: the Trivy compromise was "publicly attributed" to TeamPCP.
LiteLLM's own post does not name an actor. The GitHub advisory and PyPI do not name an actor in the pages opened.
The link between Trivy and LiteLLM is LiteLLM's belief and is not confirmed in its post.
LiteLLM: versions 1.82.7 and 1.82.8 on PyPI were affected. Official Docker proxy image users, LiteLLM Cloud users and users on 1.82.6 or earlier who did not upgrade in the window were not affected, per LiteLLM.
PyPI: the exploited versions were downloaded over 119k times. PyPI also estimates roughly 40-50% of LiteLLM installs were unpinned.
CERT-EU: approximately 500,000 devices were reportedly affected globally. This is a reported figure, and sources differ on scale.
Exposure time: LiteLLM says about 40 minutes (and also gives 10:39 to 16:00 UTC as the affected window). PyPI says 2h 32m. Sources differ.
No source opened gives named victims of stolen credentials beyond this. The advisory says anyone who installed and ran the package should assume credentials may be exposed.
PyPI estimates roughly 40-50% of LiteLLM installs fetched the latest version each time, so a bad release reached many systems before it was caught.
LiteLLM believes a compromised security scanner in its pipeline led to the break-in. A tool meant to protect the build had access to a publishing token.
PyPI says API tokens can be used later even if the first compromise goes unnoticed, and recommends Trusted Publishers with short-lived tokens.
PyPI links the compromise to a mutable reference in the Trivy GitHub Action. CERT-EU advises pinning GitHub Actions to full SHA hashes.
LiteLLM says about 40 minutes, PyPI says 2h 32m. Check every system that installed in a wide window, not a narrow one.
The advisory says anyone who installed and ran the package should assume credentials in that environment may be exposed and rotate them.
Search laptops, servers, containers and CI logs for litellm 1.82.7 or 1.82.8, including indirect installs pulled in by other AI tools.
Check site-packages for litellm_init.pth and for a systemd service called "System Telemetry Service".
Search for traffic to the attacker domains listed in the LiteLLM and PyPA advisories on 24 March 2026 and after.
If either version ran, rotate SSH keys, cloud keys, Kubernetes tokens, database passwords and anything in environment variables.
Use lock files with hashes, and consider a cooldown before taking brand new releases, as PyPI recommends.
Pin GitHub Actions to full SHA hashes, and replace long-lived publishing tokens with Trusted Publishers where possible.
Threat intelligence monitoring could watch for exposed credentials tied to your company, alerts about compromised packages you depend on, and reports naming groups like TeamPCP. Any of these might have prompted an earlier secret rotation or install freeze. This is not a promise of detection.
Versions 1.82.7 and 1.82.8 on PyPI, per LiteLLM, the GitHub advisory and PyPI. One public issue reporter said 1.82.7 looked clean, so sources differ on that version.
Sources differ. LiteLLM says about 40 minutes and also gives a window of 10:39 to 16:00 UTC. PyPI reports 2h 32m from upload to quarantine.
LiteLLM says customers running the official LiteLLM Proxy Docker image were not impacted, because it pins its dependencies.
LiteLLM says it believes so. PyPI and the GitHub advisory also describe an API token exposed through an exploited Trivy dependency. LiteLLM presents its own link as a belief, not a confirmed finding.
CERT-EU attributes the LiteLLM compromise to the cybercrime actor TeamPCP, using the word "reportedly". LiteLLM's own post names no actor.
No. The GitHub advisory says no known CVE. CISA's June 2026 LiteLLM KEV entry (CVE-2026-42271) is a separate command injection flaw.
Take control of your digital security with an exclusive demo of our AI-driven threat intelligence platform.