Backdoor litellm : comment TeamPCP a compromis le package Python et quelles mesures prendre
Aurélien Fontevive
Backdoor litellm : une menace qui cible vos pipelines CI/CD
En 2026, analyse complète du niveau de menace plus de 62 % des incidents de cybersécurité signalés par l’ANSSI impliquent la chaîne d’approvisionnement logicielle, selon le rapport annuel State of the Supply Chain 2025. Parmi eux, le backdoor litellm introduit par le groupe TeamPCP a mis en lumière la fragilité des mécanismes de confiance autour des paquets Python. Dès les premières lignes de cet article, vous découvrirez comment ce backdoor litellm a été injecté, quels dégâts il génère et quelles actions concrètes mener pour protéger vos environnements.
Analyse de la compromission du package litellm
Injection du code malveillant
Le 24 mars 2026, les versions 1.82.7 et 1.82.8 du package litellm sont apparues sur PyPI avec un backdoor litellm intégré. L’injection s’est réalisée pendant le processus de construction du wheel : le fichier litellm/proxy/proxy_server.py a reçu du code qui s’exécutait dès l’import du module, sans aucune interaction utilisateur. Dans la version 1.82.8, les attaquants ont ajouté un fichier .pth nommé litellm_init.pth à la racine du wheel, exploitant le mécanisme de site.py qui charge automatiquement ces fichiers au démarrage de l’interpréteur Python.
“Le payload est une attaque en trois étapes : récolte de crédentials, déploiement de pods Kubernetes privilégiés, puis persistance via un service systemd”, explique Kiran Raj d’Endor Labs.
Ces deux vecteurs - import automatique et .pth - permettent au backdoor litellm d’infecter tout processus Python, même ceux qui ne dépendent pas du package litellm. La charge utile est encodée en Base64 et décodée à la volée, rendant l’analyse statique difficile.
Mécanisme de la chaîne d’attaque
Le backdoor litellm se compose de trois modules :
- Credential harvester : scrute les clés SSH, les tokens Kubernetes, les fichiers
.envet même les portefeuilles de cryptomonnaies, puis les empaquette dans une archive chiffréetpcp.tar.gz. - Kubernetes lateral movement toolkitCommentaire sur le malware ? : crée un pod privilégié sur chaque nœud du cluster, utilise le token de service compte pour accéder à l’API Kubernetes, puis réalise un chroot du système de fichiers hôte.
- Persistent systemd backdoor : installe un service
sysmon.servicequi interroge toutes les 50 minutes le C2checkmarx.zone/rawpour récupérer d’éventuels binaires additionnels.
Le trafic C2 est chiffré via HTTPS et les requêtes POST contiennent l’archive tpcp.tar.gz. Le domaine de commande-et-contrôle, models.litellm.cloud, a été résolu pour la première fois dans plus de 3 500 requêtes observées en mars 2026, selon les logs partagés par JFrog.
Impact sur les environnements Kubernetes et CI/CD
Exfiltration des identifiants
Dans la pratique, les équipes françaises qui utilisent litellm dans leurs pipelines CI/CD (GitHub Actions, GitLab CI) ont vu leurs secrets se volatiliser en quelques minutes. Le credential harvester de backdoor litellm cible spécialement les jetons stockés dans les variables d’environnement de GitHub Actions, ainsi que les fichiers de configuration ~/.kube/config. Une fois récupérés, les attaquants les réutilisent pour compromettre d’autres services : bases de données, clusters EKS, voire des instances GCP.
“Nous sommes coincés dans une boucle où Trivy est compromis, puis litellm, puis les credentials de dizaines de milliers d’environnements tombent entre les mains des attaquants”, a déclaré Gal Nagli, chef de l’exposition aux menaces chez Wiz.
Déploiement de pods privilégiés
Le second module du backdoor litellm crée automatiquement des pods avec le flag securityContext.privileged=true. Chaque pod monte le système de fichiers de l’hôte (/) en lecture-écriture, injecte un script Python ~/.config/sysmon/sysmon.py et le registre comme service user systemd. Cette persistance permet aux attaquants de relancer le payload même après un redémarrage du nœud.
Pour les entreprises soumises aux exigences du RGPD et de la norme ISO 27001, ce type de persistance représente une violation grave de la clause 8.1.2 (Gestion des accès) et de la section 9 (Gestion des incidents). L’ANSSI recommande ainsi d’appliquer un durcissement strict des permissions Kubernetes et d’auditer les comptes de service avant toute mise en production.
Réaction et remédiation pour les équipes françaises
Audits et nettoyage
- Identifier les versions affectées : lancez la commande
pip list | grep litellmsur chaque machine de build. Si les versions1.82.7ou1.82.8apparaissent, remplacez-les immédiatement par la version1.82.6ou supérieure, disponible sur le dépôt officiel. - Scanner les images Docker : utilisez Trivy (version ≥ 0.45) avec l’option
--ignore-unfixedpour détecter les restes du backdoor litellm dans les images déjà construites. - Rechercher les fichiers .pth : exécutez
find $(python -c "import site; print(site.getsitepackages()[0])") -name "*.pth"et supprimez tout fichier suspect contenant le motlitellm.
Renforcement de la chaîne d’approvisionnement
- Mettre en place la signature de paquets : adoptez la norme
PEP 458pour la verification d’intégrité des wheels via--require-hashes. - Activer la politique de sécurité de pipeline : dans GitHub Actions, activez
actions/checkout@v4avec le paramètrefetch-depth: 0et limitez les permissions du tokenGITHUB_TOKENaux seules actions nécessaires. - Surveiller les flux réseau : déployez un IDS/IPS capable d’alertes sur les requêtes sortantes vers
*.litellm.cloudetcheckmarx.zone.
Mise en œuvre - étapes actionnables
- Inventorier : recensez tous les projets Python qui déclarent litellm comme dépendance dans leurs
requirements.txtoupyproject.toml. - Purger : retirez les versions contaminées, réinstallez depuis un index de confiance (ex. :
--index-url https://pypi.org/simple+--trusted-host pypi.org). - Renforcer : appliquez les mesures du paragraphe précédent (signature, politique de pipeline, IDS).
- Auditer : lancez une revue de conformité ISO 27001 pour vérifier que les contrôles d’accès et la gestion des incidents couvrent le nouveau vecteur de menace.
- Informer : diffusez un bulletin de sécurité interne détaillant la procédure de vérification des versions et les indicateurs de compromission (pods non autorisés, trafic C2).
“Cette campagne n’est certainement pas terminée ; chaque environnement compromis fournit des credentials qui débloquent la cible suivante”, conclut Endor Labs. fraude musicale IA
Tableau comparatif des versions litellm
| Version | Statut | Principale vulnérabilité | Mécanisme d’injection |
|---|---|---|---|
| 1.82.6 | Clean | Aucun | Aucun |
| 1.82.7 | Compromise | Backdoor litellm (harvester + pod) | Code injecté dans proxy_server.py exécuté à l’import |
| 1.82.8 | Compromise | Backdoor litellm (aggrégé) | .pth launcher exécuté au démarrage de l’interpréteur |
Exemple de code malveillant (fichier .pth)
# litellm_init.pth - exécuté automatiquement par site.py
import subprocess, base64, os
payload = b"c3VjY2Vzc2Z1bGx5X2RlY29kZWRfY29kZQ=="
subprocess.Popen(['python', '-c', base64.b64decode(payload)], cwd=os.getenv('HOME'))
Ce fragment montre comment un simple fichier texte .pth peut lancer un processus Python en arrière-plan, contournant ainsi les contrôles d’importation habituels.
Conclusion - prochaine action avec avis tranché
Le backdoor litellm de TeamPCP illustre la puissance d’une chaîne d’approvisionnement compromise : du scanner de vulnérabilité à la compromission de dizaines de milliers de clusters Kubernetes. Ne laissez aucune version suspecte en production ; la meilleure défense reste une vigilance continue, des contrôles d’intégrité automatisés et une réponse incident structurée conforme aux exigences de l’ANSSI, du RGPD et d’ISO 27001. Dès aujourd’hui, lancez l’inventaire de vos dépendances Python, appliquez les correctifs listés, et intégrez la signature de paquets à votre processus CI/CD : c’est la seule façon de rompre le cercle vicieux décrit par les experts.