Backdoor litellm : comment l’attaque de la chaîne d’approvisionnement par TeamPCP menace les environnements Python
Hippolyte Valdegré
Backdoor litellm : un scénario de compromission qui met en danger les chaînes d’approvisionnement Python
En 2026, le paysage de la cybersécurité a été secoué par une nouvelle attaque de la chaîne d’approvisionnement ciblant le package Python litellm. Cette compromission, orchestrée par le groupe TeamPCP, a introduit un backdoor litellm dans les versions 1.82.7 et 1.82.8, transformant un outil de génération de LLM en un vecteur de vol d’identifiants, de déplacement latéral Kubernetes et de persistance système. Selon le rapport de l’ANSSI, 27 % des incidents de 2025 impliquent la compromission d’un composant open source, soulignant la gravité de ce type d’attaque.
Dans cet article, nous décortiquons le fonctionnement du backdoor litellm, ses impacts sur les environnements CI/CD et Kubernetes, et les mesures concrètes que les équipes de sécurité peuvent adopter pour contenir la menace. Pour une analyse approfondie des tendances de menaces en 2026, consultez notre analyse des menaces 2026.
Analyse de la compromission du backdoor litellm
Méthodologie d’injection du code malveillant
Le package litellm a été compromis lors de la construction du wheel. Dans la version 1.82.7, le code injecté réside dans le fichier litellm/proxy/proxy_server.py. L’injection s’exécute dès l’import du module, grâce à une instruction import placée au niveau supérieur du fichier. En pratique, tout processus Python qui charge ce module déclenche immédiatement le payload.
# Extrait du wheel infecté - version 1.82.7
import base64, subprocess, requests
payload = base64.b64decode('...')
exec(payload) # Exécution du code malveillant au chargement du module
La version 1.82.8 renforce la persistance en ajoutant un fichier litellm_init.pth à la racine du wheel. Les fichiers .pth sont traités automatiquement par site.py lors du démarrage de l’interpréteur Python, ce qui signifie que chaque processus Python lancé sur la machine exécute le code malveillant, même si le package litellm n’est jamais importé.
“Python .pth files placed in site-packages are processed automatically by site.py at interpreter startup,” indique Endor Labs. Ce mécanisme permet au backdoor litellm de s’exécuter de manière invisible, augmentant ainsi la surface d’attaque.
Architecture en trois étapes du backdoor litellm
- Collecte d’identifiants - Le premier module scrute les clés SSH, les fichiers
.env, les secrets Kubernetes et même les portefeuilles de cryptomonnaies. Les données sont compressées et chiffrées avant d’être exfiltrées vers le domaine de commande-et-contrôlemodels.litellm[.]cloudvia une requête HTTPS POST. - Déploiement latéral Kubernetes - En exploitant le token de compte de service, le backdoor litellm crée un pod privilégié sur chaque nœud du cluster. Ce pod chroot le système de fichiers hôte et installe un service
systemdpersistant. - Persistance via systemd - Le service
sysmon.serviceinvoque un script Python (~/.config/sysmon/sysmon.py) toutes les 50 minutes, récupérant de nouveaux modules depuischeckmarx[.]zone/raw. Si l’URL contientyoutube[.]com, le script s’arrête, un mécanisme de « kill switch » partagé avec d’autres campagnes de TeamPCP.
“This campaign is almost certainly not over,” avertit Endor Labs, soulignant le pattern de réutilisation des identifiants volés pour enchaîner d’autres compromissions.
Impact sur les écosystèmes CI/CD et PyPI
Le rôle de Trivy dans la chaîne d’approvisionnement
TeamPCP a précédemment compromis les outils de scanning Trivy et KICS, qui sont intégrés dans de nombreuses pipelines CI/CD, notamment sur GitHub Actions. Le compromis de Trivy a permis au groupe d’injecter le backdoor litellm via la même chaîne d’automatisation. En 2025, JFrog a signalé une hausse de 42 % des incidents liés aux pipelines CI/CD, ce qui montre que les attaquants ciblent les points de confiance les plus répandus.
Conséquences pour les environnements de production
- Exfiltration massive de credentials : les identifiants collectés peuvent débloquer des bases de données, des services cloud et des clusters Kubernetes, facilitant l’escalade latérale. Pour comprendre comment les malwares peuvent voler des clés maîtresses de navigateurs, consultez notre article sur le malware VoidStealer.
- Installation de pods privilégiés : chaque nœud compromis héberge un conteneur capable d’interagir avec le système d’exploitation sous-jacent, contournant les politiques de sécurité des clusters.
- Persistances silencieuses : le service
sysmon.servicepersiste après redémarrage, rendant la détection difficile tant que les logs ne sont pas scrutés attentivement.
Mesures de détection et de réponse
Checklist immédiate pour les équipes de sécurité
- Inventorier les versions de litellm - Recherchez les packages
litellm==1.82.7ou1.82.8dans tous les environnements. - Isoler les hôtes affectés - Coupez le réseau des machines suspectées et suspendz les pods Kubernetes associés.
- Analyser les logs réseau - Recherchez des connexions HTTPS sortantes vers
models.litellm[.]cloudoucheckmarx[.]zone. - Supprimer les services système - Désinstallez le service
sysmon.serviceviasystemctl disable --now sysmon.service. - Auditer les pipelines CI/CD - Vérifiez que les scans Trivy/KICS ne sont pas compromis et rétablissez des versions propres.
- Révoquer les credentials - Forcez la rotation de toutes les clés SSH, tokens API et secrets Kubernetes découverts.
Tableau comparatif des versions de litellm
| Version | État du package | Code malveillant | Méthode d’exécution |
|---|---|---|---|
| 1.82.6 | Propre (officiel) | Aucun | Aucun |
| 1.82.7 | Compromis | proxy_server.py injecté | Import du module litellm.proxy.proxy_server |
| 1.82.8 | Compromis | litellm_init.pth ajouté | Chargement automatique via site.py |
Détection de l’activité Kubernetes suspecte
- Lister les pods privilégiés :
kubectl get pods -A -o jsonpath='{range .items[?(@.spec.containers[*].securityContext.privileged==true)]}{.metadata.namespace}/{.metadata.name}\n'. - Vérifier les services systemd :
systemctl list-units | grep sysmon. - Analyser les communications sortantes : utilisez
tcpdumpou les logs du pare-feu pour repérer les flux vers les domaines C2.
Bonnes pratiques pour sécuriser la chaîne d’approvisionnement
Renforcer la confiance des paquets Python
- Utiliser des signatures PGP : ne consommez que des wheels signés par les mainteneurs officiels.
- Activer la vérification des hash via
pip hash-checkingpour chaque dépendance. - Mettre en place un proxy interne qui scanne les packages avant leur diffusion en interne.
Sécuriser les pipelines CI/CD
- Isoler les runners : employez des containers épurés et ne réutilisez jamais les images entre les builds.
- Scanner les artefacts : intégrez plusieurs outils (Trivy, Grype, Snyk) et comparez leurs résultats.
- Implémenter le principe du moindre privilège : limitez les permissions des tokens GitHub Actions et évitez les accès globaux aux registres.
Surveillance continue des environnements Python
- Audit des imports : surveillez les journaux d’interpréteur Python (
-X importtime) pour détecter les imports inhabituels. - Contrôle des fichiers .pth : une simple commande
python - <<'PY' import site, sys print('\n'.join(site.getsitepackages())) PYpermet de lister les répertoires contenant des fichiers .pth. - Déploiement de honeypots : créez des environnements factices contenant des versions vulnérables pour attirer les acteurs malveillants et analyser leurs méthodes.
Conclusion - Protéger votre supply chain avant qu’elle ne soit la prochaine cible
Le backdoor litellm illustre la sophistication croissante des attaques de la chaîne d’approvisionnement, où un simple package Python devient le vecteur d’une campagne multi-vecteurs impliquant la collecte d’identifiants, le déplacement latéral Kubernetes et la persistance système. En 2026, aucune organisation ne peut se permettre de négliger la validation des dépendances tierces.
Agissez dès maintenant : effectuez l’inventaire des versions incriminées, renforcez vos pipelines CI/CD, et adoptez une hygiène stricte des signatures de paquets. En suivant les recommandations présentées, vous limitez non seulement le risque d’une compromission immédiate, mais vous contribuez également à restaurer la confiance dans les écosystèmes open source.
“The open source supply chain is collapsing in on itself,” résume Gal Nagli de Wiz. La prise de conscience collective et la mise en œuvre de pratiques de sécurité rigoureuses sont les seules voies pour briser le cercle vicieux des compromissions continues. Pour en savoir plus sur la fraude streaming IA qui a détourné 10 millions d’euros aux artistes, consultez notre analyse fraude streaming IA.