Le groupe de hacking TeamPCP poursuit son offensive sur la chaîne d’approvisionnement, ayant récemment compromis le paquet Python très utilisé, LiteLLM, disponible sur PyPI. Ils affirment avoir dérobé des données sur des centaines de milliers de dispositifs au cours de cette attaque.
LiteLLM est une bibliothèque Python open-source permettant d’accéder à divers fournisseurs de modèles de langage via une API unique. Avec plus de 3,4 millions de téléchargements quotidiens et plus de 95 millions de téléchargements au cours du dernier mois, son adoption est massive.
Selon une étude menée par Endor Labs, les cybercriminels ont diffusé des versions malveillantes de LiteLLM 1.82.7 et 1.82.8 sur PyPI, introduisant un logiciel d’exfiltration de données capable de récolter une grande variété d’informations sensibles.
Cette attaque a été revendiquée par TeamPCP, qui avait déjà orchestré une violation de sécurité notoire touchant le scanner de vulnérabilités Trivy de Aqua Security. Ce piratage a entraîné des compromissions en cascade, affectant les images Docker d’Aqua Security et le projet Checkmarx KICS, ainsi que maintenant LiteLLM.
Le groupe s’est également vu impliqué dans des attaques visant des clusters Kubernetes, déployant un script malveillant qui efface toutes les machines détectées en Iran, tout en installant un nouvel accès CanisterWorm sur les systèmes d’autres régions.
Des sources rapportent qu’environ 500 000 données ont été exfiltrées, bien qu’il s’agisse en partie de doublons. Selon VX-Underground, un nombre similaire de dispositifs infectés a été évoqué, mais BleepingComputer n’a pas pu confirmer ces chiffres.
Attaque sur la chaîne d’approvisionnement de LiteLLM
Les chercheurs d’Endor Labs ont observé que des acteurs malveillants ont diffusé aujourd’hui deux versions compromettantes de LiteLLM, chacune contenant un code caché actif lors de l’importation du paquet.
Le code malveillant a été intégré dans le fichier ‘litellm/proxy/proxy_server.py’ sous forme de charge utile encodée en base64, qui est décodée et exécutée à chaque importation du module. La version 1.82.8 présente une fonctionnalité plus agressive : elle crée un fichier ‘.pth’ nommé ‘litellm_init.pth’, facilement exécuté par Python, même si LiteLLM n’est pas spécifiquement utilisé.
Lorsque le code est exécuté, il déploie finalement une variante du logiciel malveillant TeamPCP Cloud Stealer accompagné d’un script de persistance. L’analyse de BleepingComputer révèle que cette charge utile utilise une méthode similaire à celle de l’attaque sur la chaîne d’approvisionnement de Trivy.
« Une fois initiée, la charge utile s’engage dans une attaque en trois étapes : collecte des informations d’identification (clés SSH, jetons cloud, secrets Kubernetes, portefeuilles crypto et fichiers ‘.env’), mouvement latéral entre les clusters Kubernetes via des pods privilégiés, et installation d’une porte dérobée persistante systemd qui recherche des binaires supplémentaires, » explique Endor Labs.
« Les données volées sont chiffrées et envoyées vers un domaine contrôlé par les attaquants. »

Source : BleepingComputer
Le logiciel de vol récupère un large éventail de données, telles que :
- Reconnaissance système avec les commandes hostname, pwd, whoami, uname -a, ip addr, et printenv.
- Clés SSH et fichiers de configuration
- Données d’identification pour AWS, GCP et Azure
- Jetons de compte de service Kubernetes et secrets de cluster
- Fichiers d’environnement comme les variantes ‘.env’
- Données et fichiers de configuration de bases de données
- Clés privées TLS et secrets CI/CD
- Données de portefeuilles de cryptomonnaie
Le payload de vol inclut également un script encodé en base64 installé en tant que service utilisateur systemd, déguisé en « System Telemetry Service », contactant périodiquement un serveur distant à checkmarx[.]zone pour télécharger et exécuter des charges utiles supplémentaires.

Source : BleepingComputer
Les données dérobées sont archivées sous le nom tpcp.tar.gz et envoyées vers une infrastructure contrôlée par les attaquants à models.litellm[.]cloud.

Source : BleepingComputer
Évaluation des données exposées
Toutes les versions malveillantes ont été supprimées de PyPI, laissant la version 1.82.6 comme dernière version propre.
Les organisations utilisant LiteLLM doivent impérativement :
- Contrôler les installations des versions 1.82.7 ou 1.82.8
- Effectuer une rotation immédiate de tous les secrets, jetons et identifiants utilisés dans le code sur les dispositifs impactés.
- Rechercher des artefacts de persistance tels que ‘~/.config/sysmon/sysmon.py’ et les services systemd associés.
- Inspecter les systèmes pour des fichiers suspects comme ‘/tmp/pglog’ et ‘/tmp/.pg_state’
- Vérifier les clusters Kubernetes pour des pods non autorisés dans l’espace de noms ‘kube-system’
- Surveiller le trafic sortant vers des domaines connus des attaquants
Si une compromission est suspectée, tous les identifiants sur les systèmes affectés doivent être considérés comme exposés et immédiatement renouvelés.
Des violations de données antérieures ont été rapportées à de multiples reprises en raison du manque de rotation des secrets et des identifiants d’authentification.
Des chercheurs et des cybercriminels ont affirmé que bien que la rotation des secrets soit complexe, elle demeure l’un des moyens les plus efficaces pour contrer les attaques sur la chaîne d’approvisionnement.
