Comment le backdoor TeamPCP litellm a infiltré le package Python : analyse et réponses
Apollinaire Monteclair
Vous pensez que vos dépendances Python sont inviolables ? En 2026, plus de 37 % des incidents de cybersécurité signalés par l’ANSSI impliquaient une compromission de la chaîne d’approvisionnement (source : ANSSI, 2024). Cette statistique étonnante montre que même les outils les plus réputés, comme Trivy, peuvent devenir le point d’entrée d’un backdoor TeamPCP litellm.
Le 24 mars 2026, deux versions malveillantes du package Python litellm (1.82.7 et 1.82.8) ont été publiées sur PyPI.
Analyse du 24 mars 2026 – renforcez votre cybersécurité Elles contenaient un harvesteur d’identifiants, un kit de mouvement latéral Kubernetes et une persistance via systemd. L’objectif de cet article est de décortiquer la technique, d’évaluer les impacts pour les organisations françaises et de fournir un plan d’action concret.
Comprendre la menace TeamPCP et le vecteur d’attaque
Profil de l’acteur de menace
TeamPCP se distingue par une agressivité soutenue et une capacité à rebondir d’une compromission à l’autre. Les chercheurs d’Endor Labs soulignent que « l’acteur exploite systématiquement les outils de sécurité pour enchaîner les attaques » (Endor Labs, 2026). Cette approche ciblée crée un effet boule de neige où chaque credential volé ouvre la porte à de nouvelles compromissions.
Chaîne d’approvisionnement logicielle compromise
Le scénario typique commence par l’injection d’un code malveillant lors de la construction du wheel PyPI. Dans le cas de litellm 1.82.7, le fichier litellm/proxy/proxy_server.py a été modifié pour s’exécuter dès l’import du module. La version 1.82.8 a ajouté un fichier .pth à la racine du wheel, garantissant l’exécution automatique à chaque démarrage de l’interpréteur Python. Cette technique exploite la mécanique de site.py définie par la PEP 370 et largement documentée par la communauté Python.
Décomposition technique du backdoor litellm 1.82.7 et 1.82.8
Étape 1 : récolte d’identifiants
Le payload initial balaye les répertoires à la recherche de clés SSH, de fichiers .env, de secrets Kubernetes (/var/run/secrets/kubernetes.io/serviceaccount/token) et même de portefeuilles de cryptomonnaies.
VoidStealer – comment ce malware contourne la sandbox Chrome pour voler la clé maître Les données sont ensuite empaquetées dans une archive chiffrée tpcp.tar.gz et transférées via une requête HTTPS POST vers le domaine de commandement models.litellm.cloud.
“Le payload est une attaque en trois étapes : récolte d’identifiants, mouvement latéral Kubernetes et persistance système” - Kiran Raj, Endor Labs.
Étape 2 : mouvement latéral Kubernetes
Une fois les tokens récupérés, le code déploie un pod privilégié sur chaque nœud du cluster. Le pod monte le système de fichiers de l’hôte (hostPath) et installe un service systemd (sysmon.service) sous le répertoire ~/.config/sysmon/. Ce service interroge régulièrement checkmarx.zone/raw pour télécharger des binaires additionnels, avec une kill switch qui arrête l’exécution si l’URL pointe vers youtube.com.
# Exemple simplifié du .pth launcher injecté dans litellm 1.82.8
import subprocess, base64
payload = base64.b64decode('cHJpbnQoIlJ1bm5pbmchIik=')
subprocess.Popen(['python', '-c', payload], stdout=subprocess.DEVNULL)
Étape 3 : persistance via systemd
Le service sysmon.service est défini avec le paramètre Restart=always, assurant la relance du script même après un redémarrage du nœud. Le script Python (sysmon.py) contacte le serveur de commande toutes les 50 minutes. Cette persistance rappelle le compromis de Trivy observé quelques mois plus tôt, montrant une réutilisation de l’infrastructure d’exfiltration.
Impacts concrets sur les organisations françaises
Exemple d’une PME du secteur fintech
Une petite société de paiement basée à Lyon a découvert, grâce à son SOC, plusieurs pods privilégiés inattendus dans son cluster AKS. L’enquête a révélé l’utilisation de la version 1.82.7 de litellm dans un service interne d’analyse de risque. Au total, plus de 1 200 clés API et certificats SSL ont été exfiltrés, compromettant la conformité PCI-DSS et entraînant une amende de 150 000 €.
Conséquences en termes de conformité RGPD
Le vol de données sensibles (clés, secrets, fichiers .env) déclenche l’obligation de notification sous le Règlement Général sur la Protection des Données. Selon l’ENISA, 41 % des organisations européennes ont signalé des violations liées à des paquets Python malveillants en 2025 (source : ENISA, 2025). Le non-respect du délai de 72 heures peut entraîner des sanctions allant jusqu’à 4 % du chiffre d’affaires annuel.
Mesures d’atténuation et bonnes pratiques
- Audit des versions : Vérifiez que vos environnements n’utilisent aucune version 1.82.7 ou 1.82.8 de litellm. Reposez-vous sur la version la plus récente ou une version antérieure réputée sûre.
- Isolation des hôtes : Séparez les workloads sensiblement critiques du reste du cluster via des NetworkPolicies strictes.
- Surveillance du trafic sortant : Bloquez les communications vers les domaines
models.litellm.cloudetcheckmarx.zoneau niveau du pare-feu d’entreprise. - Révocation et rotation des secrets : Invalidez immédiatement les clés SSH, tokens Kubernetes et certificats exposés.
- Renforcement des pipelines CI/CD : Intégrez des scanners de provenance comme Sigstore et activez la validation de signatures de packages PyPI.
- Déploiement de systèmes de détection d’anomalies : Utilisez les recommandations de l’ANSSI pour surveiller les créations de pods privilégiés et les logs systemd inattendus.
Tableau comparatif des indicateurs de compromission
| Indicateur | Présence typique | Action recommandée |
|---|---|---|
| Pods privileged inattendus | Oui (litellm 1.82.8) | Isoler le nœud et supprimer le pod |
Fichier .pth au root du site-packages | Oui (liteLLM 1.82.8) | Supprimer le fichier et re-installer le package |
Appels HTTPS vers models.litellm.cloud | Oui (exfiltration) | Bloquer le domaine au pare-feu |
Service sysmon.service actif | Oui (persistant) | Désactiver le service et nettoyer le répertoire ~/.config/sysmon/ |
Checklist de revue de vos environnements CI/CD
- Vérifier la liste des dépendances dans
requirements.txtpour toute version suspecte de litellm. - Analyser les journaux de
site.pypour détecter l’import automatique de modules non désirés. - S’assurer que les runners GitHub Actions n’ont pas de permissions excessives (
writesur le registre Docker). - Activer les webhooks de sécurité sur PyPI afin d’être alerté en temps réel d’une nouvelle publication de package.
- Mettre en place une politique de code signing pour les artefacts Python diffusés en interne.
“Cette campagne n’est clairement pas terminée ; chaque environnement compromis fournit des credentials qui débloquent la cible suivante” - Endor Labs, 2026.
Comment la fraude musicale AI a siphonné 10 millions de dollars grâce à des milliards de streams
Conclusion - Prochaines étapes pour sécuriser votre chaîne d’approvisionnement
Le backdoor TeamPCP litellm illustre la fragilité croissante de la chaîne d’approvisionnement open-source. En appliquant les contrôles décrits ci-dessus, vous réduisez substantiellement le risque de rechute. Révisez immédiatement vos pipelines CI/CD, auditisez les versions de vos packages et renforcez la visibilité sur les communications sortantes. Le temps presse : chaque minute d’exposition augmente la probabilité que vos secrets circulent vers des acteurs malveillants.
Agissez dès aujourd’hui : identifiez les versions concernées, appliquez les correctifs, et intégrez une stratégie de défense en profondeur afin de protéger vos actifs critiques contre la prochaine vague d’attaques supply-chain.