GHSA-92x9-889m-jgmwMalware advisory includes LiteLLM 1.107.0
The tracker includes 1.107.0 and older March malware versions; sharing a tracker does not establish a shared attacker.
LiteLLM 1.107.0 on PyPI and Docker was a credential stealer with a remote-code loader, built from a lookalike repo
LiteLLM confirms an unrevoked Agent Platform key exposed in May led to GitHub owner-token theft on October 10. Stolen maintainer tokens then published malicious 1.107.0 wheels and images on October 21. Rebuild on pinned 1.106.2 and rotate exposed credentials.
A hijacked release workflow built LiteLLM from an attacker's copy of the repo. The wheel drops a .pth file, so every Python process on the box, even pip, runs a stealer that ships your secrets to a fake litellm.dev and starts a daemon that can fetch and run more code.
LiteLLM is the Python SDK and proxy that sits between apps and dozens of LLM providers, so it tends to run with
every provider key a company has. On October 21, 2026 a malicious litellm==1.107.0 landed on PyPI at
11:39 UTC, and the official Docker images under the v1.107.0, latest, main-latest and main-stable tags
pointed at a poisoned build from 11:46 UTC. This is LiteLLM’s second release-pipeline compromise this year,
after 1.82.7 and 1.82.8 in March. JFrog and Datadog say nothing links the two so far.
According to LiteLLM’s own report, the attacker
held GitHub CLI OAuth tokens belonging to three engineers. One belonged to an organization owner and was used to
override branch protection on the private release workflow and point it at Berri-AI/litellm, a lookalike repo
one hyphen away from the real BerriAI/litellm. A second token passed the production approval gate, and a third
deleted the workflow run records afterwards. The real v1.107.0 git tag is clean. The artifacts were built
from the attacker’s copy and signed by the real pipeline. Correction, October 24: LiteLLM’s October 23 canonical report supersedes its earlier theory that tokens leaked through an internal deployment’s logs. An unrevoked Agent Platform master key exposed in May let the attacker retrieve the owner token through that service’s API on October 10; malicious CI workflows then extracted two maintainer tokens.
All seven 1.107.0 wheels carry three extra files: cook.pth, cook.py and sitecustomize.py. The source
distribution does not. Because of the .pth hook, the stealer runs at every Python start in that
environment, even if nothing imports LiteLLM and even when you run pip. Per Socket and JFrog it collects:
GetCallerIdentity checkDATABASE_URL is set, the LiteLLM proxy’s own LiteLLM_CredentialsTable and LiteLLM_ProxyModelTable,
which hold your provider keysThe data is encrypted (AES-256 with an RSA-4096-wrapped key) and POSTed to www.litellm[.]dev/healthcheck.
sitecustomize.py also forks a detached daemon that checks a GitHub dead drop every hour for a domain, then
downloads and exec()s Python from it with no integrity check. The dead drop was empty when researchers looked
and has since been removed, but the stealer part does not depend on it.
Yes. Wiz observed stolen AWS instance-role credentials being validated from 168.100.8.57 and
165.227.201.8 roughly 4.5 hours after exfiltration, and IAM enumeration in “a small number” of
environments. Datadog reports no second-stage payload seen in the wild. No source gives a download count for
1.107.0; the only figure cited is LiteLLM’s ~23 million weekly downloads overall, which is not the exposure.
A package that by design holds every LLM provider key, a payload that steals cloud and AI credentials on any Python start, and confirmed attacker use of stolen credentials: that is active exploitation with mass credential theft. It stays below L5 because it was a single release live for about two hours, not self-propagating, and no core runtime or trust anchor broke.
wiz-adv-2026-188 and XRAY-955589.Update, November 1 (UTC): The vendor’s October 30 notice publishes the replacement cosign public-key fingerprint and says the old private key may have been exposed. The rotation happened October 23; the first releases signed with the replacement key shipped October 24. Verify the pinned key and the image digest together. The malicious images were signed by the real release pipeline with the old key, so a valid signature alone never excluded this compromise. The exposed-host rebuild and credential-rotation steps above still apply.
GHSA-92x9-889m-jgmwThe tracker includes 1.107.0 and older March malware versions; sharing a tracker does not establish a shared attacker.
| Product | Safe from | Note |
|---|---|---|
| LiteLLM (PyPI) | 1.106.2 | Last clean release; 1.107.0 removed |
| LiteLLM Docker images | v1.106.2 (pin by digest) | Floating tags were repointed |
| LiteLLM Enterprise (private registry) | not affected | Per LiteLLM |
May 27, 2026
Agent Platform master key exposed in a public commit
The commit was replaced, but the key was not revoked.
Oct 10, 2026
Agent Platform API returns the GitHub owner token
Repository CI then leaks two additional maintainer tokens.
Oct 12, 2026
More repository secrets exfiltrated through CI
Oct 13, 2026
Lookalike domain litellm.dev registered
Per JFrog's WHOIS data.
Oct 21, 2026, 08:56–10:46 UTC
Payload committed to the lookalike repo Berri-AI/litellm
Wiz counts 10 commits; the first three add cook.pth, cook.py and sitecustomize.py.
Oct 21, 2026, 10:08 UTC
Branch protection overridden on the private release workflow
An org-owner's stolen GitHub CLI token disables protection and points the workflow at the lookalike repo.
Oct 21, 2026, 11:11 UTC
A second stolen credential approves the production release
Oct 21, 2026, 11:39–11:40 UTC
Seven malicious litellm 1.107.0 wheels uploaded to PyPI
Socket's scanner flags them about seven minutes later.
Oct 21, 2026, 11:46 UTC
Malicious images published to GHCR and Docker Hub
v1.107.0, latest, main-latest and main-stable all point at the same bad image index.
Oct 21, 2026, 11:53 UTC
A third stolen credential deletes the workflow run records
Oct 21, 2026, 13:51–14:20 UTC
Docker tags pulled or repointed to clean images
GHCR first, Docker Hub by 14:20 per LiteLLM. Wiz and Datadog put removal at ~13:53.
Oct 22, 2026
GitHub malware tracker includes 1.107.0
GHSA-92x9-889m-jgmw also covers the older March versions; that does not establish common attribution.
Oct 23, 2026
LiteLLM publishes its canonical attack-chain findings
The vendor replaces the earlier internal-deployment-log theory with a confirmed exposed-key and Agent Platform API path.
Oct 30, 2026
Vendor publishes the replacement image-signing key fingerprint
The key rotated on October 23 signs releases starting with v1.103.8, v1.104.6, v1.105.4 and v1.106.3. The compromised images also had valid old-key signatures.
Oct 21, 2026, ~13:20 UTC
PyPI removes 1.107.0
Wiz and Datadog say 13:20; LiteLLM's report says 13:23.
Oct 21, 2026, ~16:20–17:01 UTC
Stolen AWS instance-role credentials used from attacker IPs
Observed by Wiz in customer environments, about 4.5 hours after exfiltration.
We list each claim and who made it. Primary sources (the vendor, the researcher, the registry) are marked. Where reports disagree, we grade by the worst credible case.