Comprendre le backdoor litellm introduit par TeamPCP : risques, mécanismes et réponses
Célestine Rochefour
Le backdoor litellm : pourquoi il faut s’en préoccuper dès maintenant?
En 2026, 23 % des incidents de cybersécurité sont liés à la chaîne d’approvisionnement (source : Rapport Verizon 2025). Analyse des menaces du 24 mars 2026 Parmi eux, le backdoor litellm découvert par TeamPCP a mis en lumière les failles critiques des pipelines CI/CD français. Publié le 24 mars 2026, le backdoor litellm a contaminé les versions 1.82.7 et 1.82.8 du package Python litellm, introduisant un harceleur de crédentiels, un outil de déplacement latéral Kubernetes et une persistance système. Dès l’import du module, le payload s’exécute, ciblant les environnements de production qui utilisent litellm pour leurs modèles LLM. Cette menace montre que les outils de sécurité eux-mêmes peuvent devenir des vecteurs d’attaque.
“Le backdoor litellm est un exemple frappant de l’escalade d’une compromission CI/CD vers le runtime en production”, explique Kiran Raj d’Endor Labs.
Analyse du vecteur d’injection du backdoor litellm
Architecture du package compromis
Le package litellm est largement adopté par les développeurs français de IA pour interagir avec des modèles de langage. Dans les versions 1.82.7 et 1.82.8, deux mécanismes d’injection distincts ont été identifiés :
- Injection dans
litellm/proxy/proxy_server.py- Le code malveillant est ajouté pendant la phase de construction de la wheel. Lors de l’import delitellm.proxy.proxy_server, le payload s’exécute automatiquement. - Ajout d’un fichier
.pth(litellm_init.pth) - Placé à la racine de la wheel, le fichier est chargé parsite.pydès le démarrage de l’interpréteur Python, même si le package n’est jamais importé.
Ces deux méthodes garantissent une exécution sans interaction utilisateur, ce qui rend la détection difficile.
Exemple de code d’injection (extrait simplifié)
# contenu de litellm_init.pth (version 1.82.8)
import subprocess, base64, os
payload = base64.b64decode('aW1wb3J0IG9zLCBzdWJwcm9jZXNz')
subprocess.Popen(['python', '-c', payload], stdout=subprocess.DEVNULL)
Le fragment ci-dessus montre comment un simple fichier .pth peut déclencher un sous-processus Python en arrière-plan, décodant un payload codé en Base64. Ce mécanisme est la pierre angulaire du backdoor litellm.
Conséquences opérationnelles du backdoor litellm
Vol de crédentiels et exfiltration
Le premier volet du payload agit comme un credential harvester Commentaire sur le voidstealer : il balaie les clés SSH, les secrets Kubernetes, les fichiers .env et même les portefeuilles de cryptomonnaies. Les données récoltées sont empaquetées dans une archive cryptée tpcp.tar.gz puis envoyées via une requête HTTPS POST vers le domaine de commande-et-contrôle models.litellm.cloud.
Mouvement latéral Kubernetes
Une fois les jetons de service Kubernetes récupérés, le script déploie un privileged pod sur chaque nœud du cluster. Le pod utilise chroot pour accéder au système de fichiers hôte, puis installe un service systemd (sysmon.service) qui contacte régulièrement checkmarx.zone/raw afin de télécharger des charges supplémentaires.
Persistance via systemd
Le service persistant s’installe sous ~/.config/sysmon/sysmon.py. Toutes les 50 minutes, il interroge le serveur de contrôle ; si l’URL retournée pointe vers youtube.com, le script s’arrête, révélant un kill-switch connu des campagnes TeamPCP.
Indicateurs de compromission (IoC) à surveiller
- Trafic sortant vers
models.litellm.cloudoucheckmarx.zone. - Pods privilégiés non documentés dans les namespaces
kube-system. - Fichiers
.pthinhabituels dans le répertoiresite-packages. - Processus
sysmon.serviceapparaissant danssystemctl list-units. - Archives
tpcp.tar.gzdétectées dans les logs d’accès aux réseaux.
Tableau comparatif des stratégies d’atténuation
| Niveau | Action | Impact sur la continuité | Complexité d’implémentation |
|---|---|---|---|
| Détection | Analyse des logs réseau pour les domaines C2 | Faible (surveillance uniquement) | ✅ Simple (SIEM) |
| Contenance | Isolation des pods suspectés, suspension des runners CI/CD | Modéré (temps d’arrêt des pipelines) | ⚙️ Moyen |
| Eradication | Suppression des fichiers .pth, désinstallation des versions 1.82.7/1.82.8, rotation des secrets | Élevé (requiert redeploiement) | 🔧 Complexe |
| Renforcement | Adoption de signatures de packages, validation SLSA, audit des dépendances | Long terme (améliore la posture) | 📈 Complexe |
Étapes pratiques pour sécuriser votre supply chain (Mise en œuvre)
- Inventorier les dépendances : exécutez
pip list --format=json | jq '.[] | select(.name=="litellm")'pour repérer les versions installées. - Revenir à une version saine : désinstallez les paquets compromis (
pip uninstall litellm==1.82.7 litellm==1.82.8) puis réinstallez la version précédente (pip install litellm==1.80.0). - Auditer les CI/CD : vérifiez que les jobs GitHub Actions utilisent des scanners de sécurité signés (ex. : Trivy ≥ 0.45.0 avec signature SLSA).
- Supprimer les artefacts persistant : arrêtez le service
sysmon.service, supprimez le script~/.config/sysmon/sysmon.pyet les pods privilégiés. - Rotations massives de secrets : révoquez et regénérez toutes les clés SSH, jetons Kubernetes, et variables d’environnement exposées.
- Mettre en place une politique de validation des wheels : utilisez
twine checketpip install --require-hashespour s’assurer de l’intégrité des paquets.
Cas concret : une PME française de fintech ciblée
Contexte : La société Finexia, basée à Lyon, utilise litellm pour générer des rapports d’analyse de risques. En mars 2026, l’équipe DevOps a remarqué un trafic inhabituel vers models.litellm.cloud depuis le nœud du cluster Kubernetes dédié aux batch jobs.
Actions prises :
- Détection : les métriques Grafana ont signalé une hausse de 78 % du trafic sortant sur le port 443.
- Contenance : les pods suspects ont été immédiatement mis en pause et les runners GitHub Actions désactivés.
- Eradication : les versions 1.82.7/1.82.8 ont été remplacées, les clés API Rotées, et le service
sysmon.servicearrêté. - Renforcement : Finexia a instauré un processus de code signing Fraude streaming IA – détournement de royalties pour toutes les dépendances Python, en s’appuyant sur les recommandations de l’ANSSI (Guide d’hygiène numérique 2025).
Ce scénario démontre que le backdoor litellm peut rapidement se propager d’un environnement de test à une production critique, surtout lorsqu’il n’existe pas de contrôle de l’intégrité des artefacts.
Réflexions d’experts et perspectives
“Le supply chain open-source est en train de s’effondrer sous le poids de campagnes comme celle de TeamPCP ; il faut penser à la sécurité dès le design, pas après coup”, affirme Gal Nagli, responsable de l’exposition aux menaces chez Wiz.
Selon l’ANSSI, 12 % des paquets PyPI contenant des bibliothèques Python populaires sont aujourd’hui soumis à un examen de sécurité renforcé (source : Rapport ANSSI 2025). Cette statistique souligne la nécessité d’une vigilance accrue pour les projets français qui intègrent des dépendances tierces.
Conclusion - Prochaine action recommandée
Le backdoor litellm illustré par TeamPCP n’est pas un incident isolé : il s’inscrit dans une chaîne d’attaques qui passe du CI/CD à la production Kubernetes. Pour les organisations françaises, la priorité doit être :
- Auditer l’ensemble des environnements Python à la recherche de la version compromise.
- Isoler immédiatement les hôtes affectés et stopper tout trafic vers les domaines C2 identifiés.
- Réinitialiser toutes les crédentiels exposés et mettre en place une politique de validation des paquets (signatures, hash checks).
En adoptant ces mesures, vous réduirez de manière significative le risque d’une compromission similaire à l’avenir. Le backdoor litellm représente une menace concrète ; votre réaction rapide détermine la résilience de votre chaîne d’approvisionnement logicielle.