L’équipe de recherche en sécurité de JFrog a découvert un important détournement de package dans l’écosystème PyPI. Du code malveillant a en effet été trouvé dans LiteLLM 1.107.0, la bibliothèque Python qui fait le lien entre les applications et les fournisseurs de LLM. LiteLLM est téléchargée des centaines de millions de fois par mois depuis PyPI, et c’est la deuxième fois cette année qu’elle est détournée. Tribune.
QUOI
Les sept wheels PyPI embarquent des fichiers qui s’exécutent au démarrage de Python, volent des identifiants et ouvrent un canal d’exécution de code à distance toutes les heures, même si votre application n’importe jamais litellm.
COMMENT
Les sept wheels PyPI de la version 1.107.0 contiennent trois fichiers supplémentaires qui s’exécutent chaque fois que Python démarre dans l’environnement concerné. L’application n’a même pas besoin d’importer LiteLLM. La charge utile collecte les identifiants cloud, SSH, CI/CD et navigateur, ainsi que les jetons des outils de codage par IA, et ouvre un canal horaire d’exécution de code à distance.
IMPACT
Tout hôte ayant installé la wheel malveillante, y compris les endpoints des développeurs, les workers CI/CD, les workloads cloud, les conteneurs et les déploiements de proxy LiteLLM, peut s’être fait voler ses identifiants. Ceux-ci pourraient servir à pousser du code malveillant ou à publier d’autres packages compromis.
Comme la charge utile s’exécute à chaque démarrage de Python, même si LiteLLM n’est jamais importée, les environnements affectés doivent être isolés et reconstruits, et tous les identifiants accessibles doivent être renouvelés.
Voici une citation de Guy Korolevski, chercheur en sécurité chez JFrog :
« Une seule installation compromise peut donner à un attaquant la possibilité de pousser du code malveillant en aval. Pour les équipes de sécurité, la leçon est qu’un dépôt source sain en dit très peu sur l’artefact que vous installez réellement : il faut donc vérifier la wheel exacte et contrôler les versions avant qu’elles n’atteignent un build. Si la version 1.107.0 s’est exécutée où que ce soit dans votre environnement, renouvelez tous les identifiants accessibles et reconstruisez. »


