đ Contexte
Source : Socket Research Team, publiĂ©e le 21 octobre 2026. Il s’agit d’une analyse technique dĂ©taillĂ©e d’une attaque supply chain ciblant le package PyPI LiteLLM, un proxy LLM recevant environ 23 millions de tĂ©lĂ©chargements hebdomadaires.
đŻ Nature de l’attaque
La version LiteLLM 1.107.0 a été publiée avec des fichiers Python malveillants intégrés dans les wheels PyPI et les images Docker. Le scanner IA de Socket a détecté les sept wheels distribués sept minutes aprÚs leur publication (11:46:30 UTC le 21 octobre 2026).
La provenance du build container rĂ©vĂšle que le workflow de release a utilisĂ© un dĂ©pĂŽt lookalike Berri-AI/litellm (avec un tiret) au lieu du dĂ©pĂŽt lĂ©gitime BerriAI/litellm, diffĂ©rant d’un seul caractĂšre.
đ ïž MĂ©canisme d’infection
Trois fichiers malveillants sont installĂ©s dans le rĂ©pertoire Python de l’environnement :
cook.pth: dĂ©clenche l’import decookau dĂ©marrage Pythoncook.py: collecteur de credentials lancĂ© en thread daemonsitecustomize.py: loader distant exĂ©cutant du Python arbitraire
Le payload s’active avant mĂȘme l’import de LiteLLM, lors de tout dĂ©marrage Python dans l’environnement affectĂ©, y compris lors d’un pip.
đŠ DonnĂ©es collectĂ©es (16 modules)
- Cloud : AWS, Azure, GCP, Kubernetes, Docker, Vault, Terraform
- Développeur : Git, npm, PyPI, SSH, GPG, TLS,
.env,.netrc - IA : Codex, Claude, Gemini, Cursor, Copilot, Windsurf, Kiro, Hugging Face
- Navigateurs : Chromium, Firefox (bases de données login, cookies, historique)
- Runtime : variables d’environnement, metadata AWS/GCP/Azure, STS GetCallerIdentity
- LiteLLM DB : requĂȘtes Prisma sur
LiteLLM_CredentialsTableetLiteLLM_ProxyModelTable
đ€ Exfiltration
Les données sont chiffrées en AES-256-CBC avec clé wrappée par RSA-4096 OAEP, puis envoyées en POST vers http://www.litellm.dev/healthcheck avec le header fixe X-Token: XWiA8gZNa7NcX2XRoAEb.
Un loader distant récupÚre périodiquement (toutes les 3600 secondes) un domaine depuis https://raw.githubusercontent.com/letters9813/pythonclient-test/main/domain.txt, puis télécharge et exécute du Python arbitraire depuis http://<domain>/codepy sans vérification de signature.
đł Images Docker affectĂ©es
ghcr.io/berriai/litellm:v1.107.0(également résolu parlatest,main-latest,main-stable)ghcr.io/berriai/litellm-database:v1.107.0ghcr.io/berriai/litellm-non_root:v1.107.0docker.io/litellm/litellm:v1.107.0
đ Type d’article
Analyse technique approfondie d’un incident supply chain actif, avec extraction complĂšte des IOCs, mapping MITRE ATT&CK et recommandations de containment pour les Ă©quipes sĂ©curitĂ©, opĂ©rateurs et mainteneurs.
đ§ TTPs et IOCs dĂ©tectĂ©s
TTP
- T1195.001 â Compromise Software Dependencies and Development Tools (Initial Access)
- T1546.018 â Event Triggered Execution: Python Startup Hooks (Persistence)
- T1027.013 â Obfuscated Files or Information: Encrypted/Encoded File (Defense Evasion)
- T1140 â Deobfuscate/Decode Files or Information (Defense Evasion)
- T1552.001 â Unsecured Credentials: Credentials In Files (Credential Access)
- T1552.004 â Unsecured Credentials: Private Keys (Credential Access)
- T1552.005 â Unsecured Credentials: Cloud Instance Metadata API (Credential Access)
- T1555.003 â Credentials from Password Stores: Credentials from Web Browsers (Credential Access)
- T1105 â Ingress Tool Transfer (Command and Control)
IOC
- Domaines :
www.litellm.devâ VT · URLhaus · ThreatFox - Domaines :
test.test.comâ VT · URLhaus · ThreatFox - URLs :
http://www.litellm.dev/healthcheckâ URLhaus - URLs :
https://raw.githubusercontent.com/letters9813/pythonclient-test/main/domain.txtâ URLhaus - URLs :
https://github.com/Berri-AI/litellmâ URLhaus - SHA256 :
7598727f209d717041db37f7dca271d3a7d328a279890e0e1d55375729aeb86dâ VT · MalwareBazaar - SHA256 :
0aaf7ba346d41ef2f40390436738b001180d5a1c03aa093f121078a9969d9a1aâ VT · MalwareBazaar - SHA256 :
668169d35b87bf51324080390b1b1c5ab12bd335cfe5f1a99e3689abd5e02ae6â VT · MalwareBazaar - SHA256 :
462d0c9f67ca522d9e0e4acd245e90b36ce0d5353604a66bb7c43a1ec4a6fcf7â VT · MalwareBazaar - SHA256 :
c2e32d0ce2548aa662c18bf5001911a79fe5b30cf8357132275add02fdcde054â VT · MalwareBazaar - SHA256 :
1bbce8caa94f01c0aaa0b7ddae51553a8a32e1ce53d96d44fe583272aff7ad00â VT · MalwareBazaar - SHA256 :
12d4ccc5c6f8d35cf4f2cf233b7f3e418e863e657d81ff5f5fc9e210005b9484â VT · MalwareBazaar - SHA256 :
7f191632e7320705d154b85204f1ae546b543acbd7e8861229b76f5042b92bdbâ VT · MalwareBazaar - SHA256 :
84dc8c82c0a4a4a62552ef826b49fcc86d1a5c4a5d0f2c06665723f93d129d7dâ VT · MalwareBazaar - SHA256 :
9dd0a3926f96a37eb86cf1ee2310d9be93139cc4ebef3ef9e2efe9531390be25â VT · MalwareBazaar - SHA256 :
03ac2a8b752605d1d7710979c17ff18b03dd978203ba23ba97fd8ce3d6f897eaâ VT · MalwareBazaar - SHA256 :
34bef04fe88ac9d0aae0475630b1738681d15b94f233ac8aa46eacf5968305faâ VT · MalwareBazaar - SHA256 :
b6122440d0d9cb1eb1ade9933f49214da8c31288de7710c076c2680dfa528465â VT · MalwareBazaar - SHA256 :
1bbcb1443bc962e45f5aad53fe3d2c30600e0379715fb6c664cdd3ac126c339eâ VT · MalwareBazaar - SHA256 :
bd1aeee419ea36da9aa2b657288da4101887be468f020ac63d22ba6ed84a3ea5â VT · MalwareBazaar - SHA256 :
56b74573eed6e4aafe4b50603dbe7853e0345f188c8e44a09f1098caf1f4bcdfâ VT · MalwareBazaar - SHA256 :
a898fd08ad220fed52488906eb45d196f332b972ad5d85214e7726545ecc4218â VT · MalwareBazaar - Fichiers :
cook.pth - Fichiers :
cook.py - Fichiers :
sitecustomize.py - Fichiers :
litellm-1.107.0-cp310-abi3-macosx_10_12_x86_64.whl - Fichiers :
litellm-1.107.0-cp310-abi3-macosx_11_0_arm64.whl - Fichiers :
litellm-1.107.0-cp310-abi3-manylinux_2_28_aarch64.whl - Fichiers :
litellm-1.107.0-cp310-abi3-manylinux_2_28_x86_64.whl - Fichiers :
litellm-1.107.0-cp310-abi3-musllinux_1_2_aarch64.whl - Fichiers :
litellm-1.107.0-cp310-abi3-musllinux_1_2_x86_64.whl - Fichiers :
litellm-1.107.0-cp310-abi3-win_amd64.whl - Fichiers :
domain.txt - Fichiers :
hdr.json - Fichiers :
data.bin - Fichiers :
key.bin - Chemins :
/tmp/.pc_once_72129118c59f5636c0bb - Chemins :
/tmp/remote_code_loader.lock - Chemins :
litellm-1.107.0.data/purelib/cook.pth - Chemins :
litellm-1.107.0.data/purelib/cook.py - Chemins :
litellm-1.107.0.data/purelib/sitecustomize.py - Chemins :
cook/purelib/cook.pth - Chemins :
cook/purelib/cook.py - Chemins :
cook/purelib/sitecustomize.py
â ïž Ă propos de ces IOC â ils sont extraits automatiquement de l’article original le 22 octobre 2026 et n’ont pas fait l’objet d’une vĂ©rification externe. Un indicateur peut avoir Ă©tĂ© rĂ©attribuĂ© depuis : une IP de C2 peut redevenir un service lĂ©gitime, un domaine sinkholĂ© peut changer de propriĂ©taire. Aucune garantie d’exactitude ni d’actualitĂ© â contrĂŽlez leur validitĂ© avant tout usage opĂ©rationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.
Malware / Outils
- privcollect (stealer)
- cook.py credential collector (stealer)
- sitecustomize.py remote loader (loader)
đą Indice de vĂ©rification factuelle : 83/100 (haute)
- â socket.dev â source reconnue (liste interne) (20pts)
- â 21522 chars â texte complet (fulltext extrait) (15pts)
- â 44 IOCs dont des hashes (15pts)
- â 1/8 IOC(s) confirmĂ©(s) (MalwareBazaar, ThreatFox, URLhaus, VirusTotal) (8pts)
- â 9 TTPs MITRE identifiĂ©es (15pts)
- â date extraite du HTML source (10pts)
- ⏠aucun acteur de menace nommé (0pts)
- ⏠pas de CVE à vérifier (0pts)
IOCs confirmés externellement :
www.litellm.dev(domain) â VT (3/92 dĂ©tections)
đ Source originale : https://socket.dev/blog/litellm-compromise