Retour à l'accueil

Attaque sur litellm : vol de crédentiels dans PyPI

Compromis des versions 1.82.7 et 1.82.8 de litellm sur PyPI incluant la collecte et l'exfiltration de crédentiels via fichiers .pth et pods K8s. Mécanismes, IoC et étapes de remédiation décrits. Attaque liée à la campagne TeamPCP.

litellm sous attaque : stealer dans les versions PyPI
Advertisement 728x90

## 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.

Google AdInline article slot

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.

Google AdInline article slot

É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:latest dans kube-system avec 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 :

Google AdInline article slot
# 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-* dans kube-system.

Points clés

  • Le code malveillant dans .pth se déclenche sans import, 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

Advertisement 728x90

Lire ensuite