LiteLLM 1.107.0 détourné pour diffuser un voleur d'identifiants
Des wheels malveillants de LiteLLM 1.107.0 sont restés sur PyPI de 11 h 39 à 13 h 23 UTC le 21 octobre 2026 et lançaient un voleur d'identifiants à chaque démarrage de Python.
3 min de lecture

En chiffres
- PyPI wheels carried the malware
- 7
- UTC window the wheels were on PyPI
- 11:39-13:23
- the clean version to reinstall
- 1.106.2
Des attaquants ont publié une version malveillante de LiteLLM 1.107.0 sur PyPI et Docker le 21 octobre 2026, après avoir pris le contrôle de la chaîne de publication du projet. Toute machine qui l'a installée exécutait un voleur d'identifiants à chaque démarrage de Python. LiteLLM demande aux équipes touchées de considérer leurs secrets comme volés et de les remplacer.
LiteLLM est un outil open source placé entre les applications et les fournisseurs de modèles d'IA. Son serveur proxy stocke les clés d'API des fournisseurs, ce qui en fait une cible de choix.
Ce qui a été publié, et pendant combien de temps
Le rapport d'incident de LiteLLM liste chaque artefact touché. La balise source officielle v1.107.0 sur GitHub est saine. La version a été construite à partir d'un dépôt imitant l'original, Berri-AI/litellm, qui contenait selon StepSecurity dix commits des attaquants.
| Artefact | Touché | Fenêtre (UTC, 21 octobre) |
|---|---|---|
| PyPI | Les sept wheels de litellm==1.107.0 (macOS, Linux, musl Linux, Windows) | 11 h 39 à 13 h 23 |
| Docker Hub | v1.107.0, latest, main-latest, main-stable | 11 h 46 à 14 h 20 |
| GitHub Container Registry | Mêmes balises pour litellm, litellm-database, litellm-non_root | 11 h 46 à 13 h 51 |
La version 1.106.2 est saine, tout comme les versions candidates de 1.107.0, selon StepSecurity. LiteLLM indique que les clients de sa version entreprise privée n'ont pas été touchés.
Comment fonctionne la charge malveillante
Le malware n'attendait pas qu'on importe LiteLLM. Il ajoutait deux crochets de démarrage, cook.pth et sitecustomize.py. Python exécute les deux à chaque démarrage dans cet environnement, même quand la commande est simplement pip.
La première charge est un voleur qui se nomme « privcollect », rapporte StepSecurity. Il collecte jetons cloud, clés privées, fichiers d'identifiants d'outils d'IA, données de navigateur et variables d'environnement. Il prend aussi les identifiants enregistrés du proxy LiteLLM. Les données sont chiffrées puis envoyées à litellm.dev, un domaine enregistré le 13 octobre.
La seconde charge est un chargeur qui tourne comme processus caché en arrière-plan. Toutes les heures, il lit un nom d'hôte dans un fichier hébergé sur GitHub, télécharge du code depuis cet hôte et l'exécute. Le compte GitHub derrière ce fichier a été supprimé, mais les machines infectées continuent d'interroger la même adresse.
Comment les attaquants sont entrés
L'attaque est passée par les comptes GitHub de trois ingénieurs, a déclaré à The Hacker News Oliver Jensen, directeur de la sécurité de LiteLLM. Un identifiant a désactivé la protection de branche, un autre a approuvé la publication en production et un troisième a effacé l'historique des workflows.
Dans sa mise à jour de 20 h 30 UTC, LiteLLM dit penser que l'attaquant a récupéré des jetons GitHub CLI dans des journaux. Ces journaux appartenaient à un déploiement interne de LiteLLM accessible depuis Internet. L'entreprise note que Claude Code peut inclure le jeton GitHub CLI d'un utilisateur dans le corps d'une réponse. Si ces corps sont journalisés, le jeton finit dans les journaux. Plus tôt, Jensen avait indiqué que la méthode n'était pas encore identifiée.
Le même jour, GitHub a ouvert un aperçu public des jetons GitHub CLI à expiration. Selon le journal des modifications de GitHub, un jeton divulgué devient alors « inutilisable en quelques heures au lieu de durer indéfiniment ».
Ce que cela signifie pour les développeurs
Si vous utilisez LiteLLM, vérifiez aujourd'hui, dans l'ordre donné par LiteLLM.
- Ne commencez pas par
pip install. Les crochets de démarrage se relancent à chaque démarrage de Python. Trouvez et arrêtez d'abord le processus qui détient/tmp/remote_code_loader.lock. - Supprimez les crochets, puis réinstallez. Effacez
cook.pth,cook.pyetsitecustomize.pydesite-packages. Installezlitellm==1.106.2ou, mieux, reconstruisez l'environnement ou l'image de zéro. - Considérez les secrets comme perdus. LiteLLM estime que si 1.107.0 a tourné sur un hôte disposant d'un accès Internet sortant, le vol doit être tenu pour réussi. Remplacez les clés de fournisseurs stockées dans le proxy, ses clés maîtresse et virtuelles, le mot de passe de la base de données et le rôle cloud de la machine.
- Épinglez par empreinte. Des balises comme
latestont pointé vers l'image piégée pendant plus de deux heures. Épinglez les images par empreinte (digest) et les paquets par hachage. - Raccourcissez vos propres jetons. Activez les jetons GitHub CLI à expiration avec
gh auth login --expiring, disponible à partir de gh 2.103.0. Gardez les jetons hors des corps de requêtes et de réponses journalisés.
C'est la deuxième version de LiteLLM détournée cette année, après les versions 1.82.7 et 1.82.8 en mars. Des clés de fournisseurs stockées étaient aussi la cible dans OpenCode Console : une faille expose les clés de fournisseurs d'IA stockées la semaine dernière.
Sources
- Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised - LiteLLM
- LiteLLM Compromised in Supply Chain Attack Delivering Credential Stealer and Backdoor - The Hacker News
- litellm 1.107.0 Compromised on PyPI: Backdoored Wheels Drop a Credential Stealer and an Hourly Remote Code Loader - StepSecurity
- GitHub CLI: Opt in to expiring, auto-refreshing OAuth tokens - GitHub Changelog
Articles liés

Une faille du SAP Cloud SDK for Python peut divulguer des secrets OAuth2
Une faille notée CVSS 10.0 dans le SAP Cloud SDK for Python permet de rediriger les requêtes de jetons OAuth2 et de voler les secrets d'une application. Les versions 0.45.2 et suivantes la corrigent.

Une faille XSS dans les logs de build de SourceHut permettait de pirater des comptes
Un log de build piégé pouvait exécuter un script dans le navigateur d'un utilisateur de SourceHut. ansi2html 1.9.4 corrige la faille CVE-2026-92973, qui touchait les versions 1.7.0 à 1.9.3.

Chrome passe à un rythme de deux semaines
Chrome 153 lance un cycle de deux semaines pour les jalons, contre quatre avant. Chrome 149 et 150 ont corrigé à eux seuls 1 072 failles de sécurité, selon Google.