LiteLLM 1.107.0 : un package PyPI piégé vole les identifiants
LiteLLM 1.107.0, poussé sur PyPI et Docker le 21 octobre, embarquait un voleur d'identifiants et une porte dérobée. Revenez en 1.106.2 et renouvelez tous les secrets exposés.
Une version malveillante de LiteLLM, la passerelle et le SDK qui relient les applications aux fournisseurs de LLM, a été publiée le 21 octobre 2026 sur PyPI et sur les registres de conteneurs. La version 1.107.0 embarquait un voleur d'identifiants et une porte dérobée exécutant du code Python fourni par l'attaquant. L'équipe de recherche de JFrog et le scanner de Socket ont donné l'alerte quelques minutes après la publication. Le package a été mis en quarantaine par PyPI et les images malveillantes retirées.
Ce qui est touché
Les sept wheels PyPI de la 1.107.0 (macOS, Linux, Windows) plus une distribution source falsifiée, et les images Docker ghcr.io/berriai/litellm:v1.107.0 ainsi que les tags latest, main-latest et main-stable qui pointaient vers le même index d'image. Les tags associés litellm-database:v1.107.0, litellm-non_root:v1.107.0 et docker.io/litellm/litellm:v1.107.0 sont également concernés.
Comment la charge s'exécute
Le code malveillant s'exécute au démarrage de l'interpréteur Python, via des hooks de configuration de chemins — cook.pth et sitecustomize.py — donc sans même que LiteLLM soit importée. Deux étages :
- un voleur (baptisé
privcollectpar StepSecurity) qui récupère jetons cloud, identifiants de comptes développeurs, clés privées, fichiers JSON d'identifiants des outils de codage par IA, données des navigateurs Chromium et Firefox, variables d'environnement, et les identifiants et la configuration du proxy LiteLLM lui-même ; - un chargeur qui lance un démon en arrière-plan, lit un domaine depuis une « boîte morte » GitHub toutes les heures et exécute le Python servi par l'attaquant depuis
http://<domaine>/codepy.
Guy Korolevski, chercheur en sécurité chez JFrog, résume l'enjeu : « Une seule installation compromise peut donner à un attaquant la possibilité de pousser du code malveillant en aval. »
D'après LiteLLM, le déclenchement de la release serait passé par les comptes GitHub de trois ingénieurs, « vraisemblablement via des jetons OAuth de la CLI GitHub volés » — un compte a lancé la publication, un autre l'a approuvée. La méthode de vol des jetons n'est pas identifiée, d'autres accès ne peuvent être exclus.
Indicateurs de compromission
Publiés par Socket, verbatim :
# Exfiltration (HTTP POST)
hxxp://www[.]litellm[.]dev/healthcheck
En-tête d'envoi : X-Token: XWiA8gZNa7NcX2XRoAEb
# Chargeur / code distant
hxxps://raw[.]githubusercontent[.]com/letters9813/pythonclient-test/main/domain.txt
http://<domaine>/codepy
# Wheels malveillantes (SHA-256)
7598727f209d717041db37f7dca271d3a7d328a279890e0e1d55375729aeb86d macosx_10_12_x86_64
0aaf7ba346d41ef2f40390436738b001180d5a1c03aa093f121078a9969d9a1a macosx_11_0_arm64
668169d35b87bf51324080390b1b1c5ab12bd335cfe5f1a99e3689abd5e02ae6 manylinux_2_28_aarch64
462d0c9f67ca522d9e0e4acd245e90b36ce0d5353604a66bb7c43a1ec4a6fcf7 manylinux_2_28_x86_64
c2e32d0ce2548aa662c18bf5001911a79fe5b30cf8357132275add02fdcde054 musllinux_1_2_aarch64
1bbce8caa94f01c0aaa0b7ddae51553a8a32e1ce53d96d44fe583272aff7ad00 musllinux_1_2_x86_64
12d4ccc5c6f8d35cf4f2cf233b7f3e418e863e657d81ff5f5fc9e210005b9484 win_amd64
Que faire
- Chercher. Inspecter lockfiles,
pip freezeet manifestes d'images pour LiteLLM1.107.0et les tags GHCR/Docker ci-dessus. Tout hôte l'ayant installée ou tirée depuis le 21 octobre est à considérer comme compromis. - Épingler. Revenir en 1.106.2 par digest ; vérifier les artefacts avant épinglage, aucune release n'étant certifiée saine.
- Renouveler tout ce qui était accessible, depuis un environnement sain : jetons cloud, clés d'API, clés SSH et de signature, sessions stockées par le navigateur, et les identifiants propres au proxy LiteLLM.
- Traquer. Surveiller les POST sortants vers
litellm[.]dev/healthcheck, les artefacts de démarragecook.pth/sitecustomize.pyet les processus Python de fond interrogeant GitHub. - Auditer les OAuth GitHub. Révoquer les autorisations de la CLI GitHub pour tout ingénieur disposant de droits de publication.
Contexte
C'est au moins la deuxième compromission de la chaîne logistique de LiteLLM en 2026, et elle réutilise la technique du hook de démarrage .pth déjà vue en mars. La nouveauté tient au point d'entrée : non pas un jeton de publication fuité, mais des jetons OAuth d'une CLI de développeur, utilisés pour piloter l'automatisation de release du projet. Les passerelles LLM concentrent clés de modèles et identifiants cloud : les attaquants les traitent désormais comme une cible qui vaut une seconde visite.