litellm 1.107.0 Compromised on PyPI: Backdoored Wheels Drop a Credential Stealer and an Hourly Remote Code Loader
AI Summary
On October 21, 2026, the Python package litellm version 1.107.0 was compromised on PyPI, with all seven compiled wheels and official Docker images containing malicious payloads. The attack originated from a lookalike GitHub repository (Berri-AI/litellm) that was used to build the release, bypassing security controls. The malicious wheels install three files—cook.pth, cook.py, and sitecustomize.py—into the Python site-packages directory, which execute automatically on every Python interpreter start. These payloads include a credential stealer named 'privcollect' that exfiltrates sensitive data such as browser passwords, SSH and GPG keys, cloud credentials, and LiteLLM proxy database contents to the domain www.litellm.dev, and a remote code loader that polls a GitHub dead drop hourly for additional commands. The attacker gained access through stolen GitHub tokens exposed in logs and modified the release workflow using an organization owner's token, allowing the malicious artifacts to be signed and published through legitimate channels.
AI-extracted · verify before operational use
Indicators of Compromise 15 extracted
| Type | Value | Detail |
|---|---|---|
| Domain | litellm[.]dev | Details → |
| Domain | www[.]litellm[.]dev | Details → |
| GitHub Repo | letters9813/pythonclient-test | Details → |
| GitHub User | letters9813 | Details → |
| Filename | cook.pth | Details → |
| Filename | cook.py | Details → |
| Filename | sitecustomize.py | Details → |
| Filename | /tmp/.pc_once_72129118c59f5636c0bb | Details → |
| Filename | /tmp/remote_code_loader.lock | Details → |
| SHA-256 | 7f191632e7320705d154b85204f1ae546b543acbd7e8861229b76f5042b92bdb | Details → |
| SHA-256 | 9dd0a3926f96a37eb86cf1ee2310d9be93139cc4ebef3ef9e2efe9531390be25 | Details → |
| SHA-256 | 34bef04fe88ac9d0aae0475630b1738681d15b94f233ac8aa46eacf5968305fa | Details → |
| SHA-256 | 462d0c9f67ca522d9e0e4acd245e90b36ce0d5353604a66bb7c43a1ec4a6fcf7 | Details → |
| SHA-256 | 1bbce8caa94f01c0aaa0b7ddae51553a8a32e1ce53d96d44fe583272aff7ad00 | Details → |
| SHA-256 | 2befe2a79fb4fbbd9a543b5b40b530c8cffa8771bab22b8fb22b2e4ae3b1f819 | Details → |