## Compromission de litellm 1.82.7/1.82.8 : Mécanisme de vol d'identifiants via PyPI
La bibliothèque litellm dans les versions 1.82.7 et 1.82.8 sur PyPI contient du code malveillant qui vole les clés SSH, les identifiants cloud, les secrets Kubernetes et les clés API. L'attaque exploite la chaîne d'approvisionnement, se déclenchant automatiquement lors du lancement de l'interpréteur Python ou de l'importation du module. Les systèmes affectés incluent ceux qui ont des dépendances transitives, comme les plugins MCP de Cursor.
Détection de l'incident
L'attaque a été détectée grâce à une bombe à fork dans un fichier .pth qui a épuisé les ressources de l'hôte. Sans ce bug, le malwares aurait pu opérer de manière furtive. Ces versions ont été publiées le 24 mars 2026, entre 10:39 et 10:52 UTC, sans aucune mise à jour sur GitHub — le code malveillant n'a été injecté que dans les artefacts PyPI, contournant ainsi la revue de code.
Les chercheurs de FutureSearch ont remarqué l'absence de tags de version. Le dépôt est propre, ce qui est typique des attaques sur la chaîne d'approvisionnement.
Détails techniques du malware
Étape 1 : Collecte de données
Le payload extrait :
- Clés SSH et configurations.
- Fichiers
.env. - Identifiants AWS, GCP, Azure.
- Fichiers kubeconfig et secrets Kubernetes.
- Mots de passe de bases de données.
- Historique shell.
- Fichiers de portefeuilles crypto.
- Variables d'environnement.
Des requêtes sont effectuées vers les endpoints IMDS des fournisseurs cloud.
Étape 2 : Exfiltration
Les données sont chiffrées avec AES-256-CBC en utilisant une clé publique RSA-4096 (codée en dur) et envoyées vers models.litellm[.]cloud — un domaine non officiel.
Étape 3 : Persistance
Dans Kubernetes, le malware :
- Lit tous les secrets du cluster via le jeton du compte de service.
- Crée des pods privilégiés
alpine:latestdanskube-systemavec le système de fichiers hôte monté. - Installe un backdoor
~/.config/sysmon/sysmon.py. - Enregistre un service utilisateur systemd pour s'exécuter sur tous les nœuds.
La version 1.82.8 utilise litellm_init.pth (34 628 octets), exécuté automatiquement par Python. La version 1.82.7 contient du code obfuscé dans proxy/proxy_server.py.
Détection et remédiation
Vérifiez les systèmes avec ces commandes :
# Version de litellm
pip show litellm
# Traces dans le cache uv
find ~/.cache/uv -name "litellm_init.pth"
# Backdoor
ls ~/.config/sysmon/sysmon.py
ls ~/.config/systemd/user/sysmon.service
Dans Kubernetes : kubectl get pods -n kube-system | grep node-setup-.
Si les versions 1.82.7/1.82.8 sont installées :
pip uninstall litellm
rm -rf ~/.cache/uv
# Ou : pip cache purge
Revenez à la version 1.82.6 (22 mars, propre selon Endor Labs). Faites pivoter tous les identifiants : clés SSH, jetons cloud, kubeconfig, clés API, mots de passe de bases de données. Vérifiez les pipelines CI/CD et les images Docker des dernières 24–48 heures.
Contexte de la campagne TeamPCP
Cette attaque fait partie de la campagne TeamPCP (depuis décembre 2025) :
- 19 mars : Trivy (75/76 tags de
trivy-action). - 21–23 mars : KICS/Checkmarx, OpenVSX, CanisterWorm dans npm (64+ paquets).
- 24 mars : litellm.
Marqueurs communs : AES-256 + RSA-4096, une seule clé publique. Le GitHub Issue #24512 dans litellm a été fermé comme « not planned » avec des commentaires suspects — possible compromission du compte.
Indicateurs de compromission
- Domaine C2 :
models.litellm[.]cloud. - Fichier :
litellm_init.pth. - SHA-256 :
ceNa7wMJnNHy1kRnNCcwJaFjWX3pORLfMh7xGL8TUjg. - Backdoor :
~/.config/sysmon/sysmon.py. - K8s : pods
node-setup-*danskube-system.
Points clés
- Le code malveillant dans
.pthse déclenche sansimport, affectant tous les processus Python. - L'exfiltration est chiffrée ; le C2 est un faux domaine litellm.
- L'exploitation Kubernetes donne un accès total au cluster via des pods privilégiés.
- Partie de la chaîne TeamPCP : surveillez Trivy, KICS, paquets npm.
- Retour à 1.82.6 + rotation complète des identifiants obligatoire.
— Editorial Team
Aucun commentaire pour le moment.