🔍 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 de cook au dĂ©marrage Python
  • cook.py : collecteur de credentials lancĂ© en thread daemon
  • sitecustomize.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_CredentialsTable et LiteLLM_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 par latest, main-latest, main-stable)
  • ghcr.io/berriai/litellm-database:v1.107.0
  • ghcr.io/berriai/litellm-non_root:v1.107.0
  • docker.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