step-security · Crawled Oct 23, 2026

litellm 1.107.0 Compromised on PyPI: Backdoored Wheels Drop a Credential Stealer and an Hourly Remote Code Loader

15 IoCs
Read original article ↗

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 →