LiteLLM 1.107.0 shipped a credential stealer on PyPI and the Docker latest tag
All seven litellm 1.107.0 wheels uploaded to PyPI at 11:39 UTC on 2026-10-21 contained three extra files under litellm-1.107.0.data/purelib/ (cook.pth, cook.py, sitecustomize.py) that pip installs into site-packages root. cook.pth imports cook.py at every Python start; it collects host info, browser passwords, SSH and cloud credentials, CI and registry tokens, AI tool configs, other processes' environments and, when DATABASE_URL is set, LiteLLM's credential and model tables, then POSTs an encrypted bundle to www.litellm.dev. sitecustomize.py adds an hourly remote-code loader keyed off a GitHub dead-drop file. The v1.107.0 git tag is clean; the sdist pyproject.toml carries an injected maturin data = "cook" line. PyPI removed 1.107.0. The Docker v1.107.0 image and the floating latest, main-latest and main-stable tags on GHCR and Docker Hub share digest sha256:1bbcb1443bc962e45f5aad53fe3d2c30600e0379715fb6c664cdd3ac126c339e and still resolved to it at 13:44 UTC.
Also tracked as litellm 1.107.0 · LiteLLM supply chain compromise October 2026 · cook.pth · privcollect · ghcr.io/berriai/litellm:latest
- First observed
- Oct 21, 2026
- Last observed
- Oct 21, 2026
- Last reviewed
- Oct 21, 2026
- Tracking ended
- Oct 21, 2026
Record exports
Uncertainty and limitations
Read the evidence limits before acting on this record.
Payload analysis comes from AISLE and the public incident report (issue #47826). The claim that the release was built from the lookalike repository Berri-AI/litellm is the reporter's finding, not yet confirmed by BerriAI. HOL verified registry tag digests directly but did not unpack the Docker image. Number of affected installs is unknown.
- Installs pinned to 1.106.2 or earlier, and Docker images pinned to version tags other than v1.107.0, are reported clean
- The 1.107.0 sdist lacks the payload files though its pyproject.toml is tampered
- Installs after PyPI removal resolve to 1.106.2
- This is not a remotely exploitable flaw in LiteLLM code; impact is on machines that installed the poisoned build
- A passing cosign verify on the v1.107.0 image is not evidence of a clean image
Guard coverage and policy
What Guard's reviewed assertions do and do not claim for this campaign, and the reviewed starting points for defense.
No Guard coverage mapping is published for this record.
No campaign-specific policy guidance is published.
Safe next step. Campaign guidance is defensive context. It does not auto-apply policy or claim universal campaign coverage.
Timeline
Reviewed events, oldest first, each tied to a verified source.
- Update
GitHub repository hosting the stage-2 dead-drop file is created.
- First observed
litellm 1.107.0 wheels with credential stealer uploaded to PyPI.
- Disclosure
AISLE dependency firewall flags the first malicious wheel.
- Update
Docker latest, main-latest and main-stable tags move to the v1.107.0 image digest.
- Disclosure
Public incident report opened on BerriAI/litellm.
- Registry action
PyPI has removed 1.107.0; latest resolves to 1.106.2. Docker floating tags still point at the infected digest.
Publication clock: 2.1 hours from reviewed disclosure timestamp to HOL publication; 12-hour critical target; within target.
Reviewed artifacts
The specific artifacts this record concerns, as reviewed. Names and versions are shown as text; a registry link is not recorded here.
litellm@1.107.0pypipackageghcr.io/berriai/litellm@v1.107.0, latest, main-latest, main-stable @ sha256:1bbcb1443bc962e45f5aad53fe3d2c30600e0379715fb6c664cdd3ac126c339edockerpackage
Indicators
Published values are defanged so nothing here is copy-paste executable. These are inert text, never links.
8 indicators are recorded as not defanged. Treat them as live.
- domainhigh confidencedefanged
www[.]litellm[.]dev - urlhigh confidencedefanged
hxxps://raw[.]githubusercontent[.]com/letters9813/pythonclient-test/main/domain.txt - file hashhigh confidencenot defanged
1bbcb1443bc962e45f5aad53fe3d2c30600e0379715fb6c664cdd3ac126c339e - file hashhigh confidencenot defanged
462d0c9f67ca522d9e0e4acd245e90b36ce0d5353604a66bb7c43a1ec4a6fcf7 - file hashhigh confidencenot defanged
668169d35b87bf51324080390b1b1c5ab12bd335cfe5f1a99e3689abd5e02ae6 - file hashhigh confidencenot defanged
1bbce8caa94f01c0aaa0b7ddae51553a8a32e1ce53d96d44fe583272aff7ad00 - file hashhigh confidencenot defanged
c2e32d0ce2548aa662c18bf5001911a79fe5b30cf8357132275add02fdcde054 - file hashhigh confidencenot defanged
7598727f209d717041db37f7dca271d3a7d328a279890e0e1d55375729aeb86d - file hashhigh confidencenot defanged
0aaf7ba346d41ef2f40390436738b001180d5a1c03aa093f121078a9969d9a1a - file hashhigh confidencenot defanged
12d4ccc5c6f8d35cf4f2cf233b7f3e418e863e657d81ff5f5fc9e210005b9484
Sources
Every claim on this record is traceable to the sources below.
- AISLE: Compromised LiteLLM package found 3 minutes after releaseresearch · observed October 21, 2026
- BerriAI/litellm issue #47826: litellm 1.107.0 compromisedother primary · observed October 21, 2026
- LiteLLM v1.107.0 GitHub releaseother primary · observed October 21, 2026
- PyPI litellm release historyother primary · observed October 21, 2026
- Docker Hub litellm/litellm tagsother primary · observed October 21, 2026
Reviewed in full by HOL Guard Security Publishing.
- Published
- Last full review
- Last modified
Record HGTC-2026-385E1963