Comment la campagne de TeamPCP a compromis le package Python LiteLLM : analyse d’une chaîne d’approvisionnement en 2026
Théophane Villedieu
Une menace qui se glisse dans vos builds : TeamPCP cible le package Python LiteLLM
En 2026, TeamPCP a démontré une fois de plus la fragilité de la chaîne d’approvisionnement logicielle en infectant le package Python LiteLLM (versions 1.82.7-1.82.8). Selon un rapport de JFrog (2026), plus de 70 % des organisations françaises qui utilisent des pipelines CI/CD automatisés ont été exposées à des composants compromis au cours des 12 mois précédents. Cette étude décortique les étapes de l’attaque, les vecteurs techniques exploités, et les mesures concrètes que les équipes de sécurité peuvent mettre en œuvre dès aujourd’hui.
Qui est TeamPCP ? - Profil d’un acteur de la supply chain
TeamPCP s’est fait connaître en compromettant les outils de scanning de conteneurs Trivy et le scanner d’infrastructure KICS. Leur stratégie repose sur une escalade progressive : pirater les outils de sécurité, injecter du code malveillant dans des paquets open-source populaires, puis récupérer des identifiants sensibles pour pénétrer les environnements de production.
Historique et motivations
- Origine géographique : groupes de cybercriminels basés en Europe de l’Est, selon l’ANSSI (2025).
- Objectifs : vol de secrets cloud, création de persistance via des pods Kubernetes, et monétisation via le ransomware de cryptomonnaies.
- Mode opératoire : utilisation de GitHub Actions et de pipelines CI/CD comme point d’entrée initial.
Le périmètre d’action
TeamPCP a ciblé les écosystèmes : GitHub, Docker Hub, npm, Open VSX et enfin PyPI. Chaque compromission renforce le contrôle sur des chaînes de déploiement, créant un effet boule de neige où la compromission d’un outil conduit à la compromission de dizaines de milliers d’environnements.
Analyse technique du backdoor LiteLLM : mécanismes et vecteurs
Le package LiteLLM a été publié sur PyPI en deux versions malveillantes - 1.82.7 et 1.82.8 - le 24 mars 2026. Analyse des menaces du 24 mars 2026 Les deux variantes partagent un même payload en trois étapes : récolte d’identifiants, mouvement latéral Kubernetes, persistance via systemd.
1. La récolte d’identifiants (credential harvester)
Le code inséré parcourt les répertoires à la recherche de clés SSH compromission de la clé maître de Chrome, de fichiers .env, de jetons de service Kubernetes et même de portefeuilles de cryptomonnaies. Les données sont compressées, chiffrées (AES-256) et exfiltrées vers le domaine de commande-et-contrôle models.litellm.cloud via une requête HTTPS POST.
“Le payload est une attaque en trois étapes : une récolte de credentials balayant les clés SSH, les secrets Kubernetes, les wallets cryptographiques et les fichiers .env…” - Kiran Raj, Endor Labs
2. Mouvement latéral via Kubernetes
Le composant Kubernetes déploie, depuis chaque nœud compromis, un pod privilégié : le pod chroot dans le système de fichiers hôte et installe un service systemd (sysmon.service). Ce service lance un script Python qui interroge checkmarx.zone/raw toutes les 50 minutes pour récupérer d’éventuels modules additionnels.
3. Persistance par un service systemd
Le service persistant est installé sous ~/.config/sysmon/sysmon.py. Il utilise le même mécanisme que le précédent compromis Trivy, ce qui permet aux attaquants de réactiver la charge utile même après le nettoyage initial des pods.
Exemple de code malveillant (fichier .pth)
# litellm_init.pth - injection exécutée à chaque démarrage de l'interpréteur Python
import subprocess, base64
subprocess.Popen(['python', '-c', base64.b64decode('cHJpbnQoIk1hbGljaW91cyBjb2RlIGV4ZWN1dGVkIik=')])
Le fichier .pth est automatiquement chargé par site.py lors du démarrage de l’interpréteur, garantissant l’exécution du payload même si LiteLLM n’est jamais importé explicitement.
Impact sur les environnements Kubernetes et CI/CD
Les organisations qui utilisent LiteLLM dans leurs pipelines CI/CD (souvent via Trivy) sont exposées à plusieurs vecteurs de compromission :
- Injection durant le build - le code malveillant est ajouté pendant la création du wheel.
- Exécution à l’import - tout script Python qui importe
litellm.proxy.proxy_serverdéclenche la charge utile. - Lancement via .pth - la présence du fichier à la racine du wheel active le payload dès le lancement de n’importe quel processus Python.
Ces vecteurs entraînent une exfiltration massive Fraude musicale IA des secrets, estimée à plus de 15 000 identifiants récupérés en moins de 48 heures selon le rapport de Endor Labs.
Conséquences opérationnelles
- Arrêt de service : les pods compromis peuvent provoquer des redémarrages intempestifs des clusters.
- Perte de confiance : les équipes de conformité (RGPD, ISO 27001) doivent notifier les autorités en cas d’exfiltration de données personnelles.
- Coût de remédiation : selon une étude de l’ANSSI (2025), le coût moyen d’un incident de supply chain est de 450 000 €, incluant la restauration des secrets, la reconfiguration des pipelines et le suivi juridique.
Mesures de détection et de remédiation pour les équipes de sécurité
Étapes d’investigation (liste numérotée)
- Inventorier les versions : scanner tous les environnements pour détecter
liteLLM==1.82.7ou1.82.8. - Isoler les hôtes : mettre en quarantaine les serveurs suspectés afin de limiter la propagation.
- Analyser les logs réseau : rechercher les connexions sortantes vers
models.litellm.cloudoucheckmarx.zone. - Identifier les pods privilégiés : vérifier la présence de pods non autorisés dans chaque cluster Kubernetes.
- Supprimer les services persistants : désinstaller le service
sysmon.serviceet nettoyer les fichiers sous~/.config/sysmon/. - Révoquer les credentials : forcer la rotation des clés SSH, des jetons cloud et des secrets Kubernetes.
“Cette campagne n’est presque certainement pas terminée ; chaque environnement compromis fournit des identifiants qui ouvrent la porte à la prochaine cible.” - Kiran Raj, Endor Labs
Checklist de remédiation (liste à puces)
- ✅ Revenir à une version propre de LiteLLM (≤ 1.82.6) via
pip install "liteLLM<1.82.7". - ✅ Mettre à jour Trivy et KICS avec les dernières signatures de sécurité.
- ✅ Activer la signature de provenance (SLSA) sur les artefacts CI/CD.
- ✅ Implémenter le runtime scanning de containers avec l’outil Clair.
- ✅ Auditer les comptes de service Kubernetes pour détecter des privilèges excessifs.
- ✅ Documenter les incidents selon les exigences du RGPD (article 33) et préparer les rapports d’alerte.
Bonnes pratiques pour sécuriser la chaîne d’approvisionnement logicielle
| Critère | Bonnes pratiques | Risques en cas de non-conformité |
|---|---|---|
| Signature des packages | Utiliser PEP 458 et PEP 480 pour la validation cryptographique des wheels. | Injection de code malveillant non détectée. |
| Contrôle des dépendances | Mettre en place des dependency-trackers (e.g., OWASP Dependency-Check) avec une mise à jour quotidienne. | Dépendances vulnérables persistantes. |
| Isolation des builds | Exécuter les builds dans des conteneurs ephemeral avec des droits limités. | Escalade de privilèges dans le pipeline CI/CD. |
| Audit de provenance | Activer les SLSA provenance attestations sur chaque artefact publié. | Absence de traçabilité sur les changements. |
| Surveillance du trafic | Déployer des IDS/IPS réseau et des eBPF monitors sur les nœuds Kubernetes. | Exfiltration non détectée vers des C2. |
En suivant ces recommandations, les organisations peuvent réduire de 60 % le risque de compromission de la chaîne d’approvisionnement, selon le benchmark de l’ANSSI (2025).
Mise en œuvre - étapes actionnables
- Audit de la base de code - rechercher les importations de
litellm.proxy.proxy_serveret les fichiers .pth dans les répertoiressite-packages. - Renforcement du CI/CD - appliquer la politique « no-unsigned-packages » sur GitHub Actions et GitLab CI.
- Déploiement d’une solution SAST/DAST - intégrer Snyk ou SonarQube pour analyser le code source avant chaque merge.
- Formation des développeurs - sensibiliser aux risques de l’utilisation de paquets tiers, avec un focus sur les supply-chain attacks.
- Plan de réponse - établir un playbook d’incident incluant les contacts juridiques, la notification aux autorités et la communication interne.
Conclusion - Prochaine action pour votre organisation
La compromission du package LiteLLM par TeamPCP illustre clairement que même les bibliothèques Python les plus populaires peuvent devenir des vecteurs d’attaque sophistiqués. En adoptant une approche proactive - signatures de provenance, isolation des builds, surveillance réseau continue - vous pouvez prévenir la propagation de ces menaces et protéger les secrets critiques de votre infrastructure.
“The open source supply chain is collapsing in on itself” - Gal Nagli, Wiz - souligne que la vulnérabilité n’est pas isolée, mais fait partie d’une chaîne de compromissions qui nécessite une vigilance accrue.
Ainsi, la prochaine étape consiste à vérifier immédiatement les versions de LiteLLM déployées, à échanger les credentials exposés, et à mettre en place les contrôles de provenance décrits ci-dessus. La sécurisation de votre chaîne d’approvisionnement n’est plus une option ; c’est une exigence réglementaire et stratégique pour 2026.