Fuite de la clé maître LiteLLM : analyse complète de l'attaque et leçons pour la sécurité des CI/CD
Églantine Montclair
Une clé maître LiteLLM accidentellement publique a ouvert la porte à une compromission en profondeur
En octobre 2026, l’équipe de LiteLLM, une passerelle open source populaire pour les grands modèles de langage (LLM), a révélé une attaque complexe de la chaîne d’approvisionnement. Celle-ci a débuté par une fuite de sa clé maître LiteLLM dans un dépôt GitHub public en mai 2026. Bien que l’erreur ait été rapidement repérée, la révocation de cette clé n’a jamais été effectuée, créant une vulnérabilité critique exploitée cinq mois plus tard. Cet incident démontre comment une simple clé non révoquée peut permettre à un attaquant de voler des tokens GitHub, de modifier des pipelines de release et de propager une version malveillante d’un package Python à des milliers d’utilisateurs. Selon le dernier rapport de GitGuardian, plus de 10 millions de secrets ont été exposés sur GitHub en 2025, une augmentation de 40 % par rapport à l’année précédente. Cette statistique souligne l’urgence de traitersérieusement chaque fuite, même lorsqu’elle semble rapidement corrigée.
L’erreur initiale : un fichier de configuration exposé dans un dépôt public
Le 27 mai 2026, un développeur de LiteLLM a commité un fichier de configuration dans le dépôt public BerriAI/lite-harness. Ce fichier contenait la clé maître de la plateforme Agent Platform interne, utilisée pour orchestrer des agents LLM. Selon les mots d’Oliver Jensen et Mateo Wang, les ingénieurs de LiteLLM : « L’erreur a été rapidement identifiée, le commit a été forcé (force-push) et nous avons repéré les clés exposées comme devant être révoquées. Cependant, la révocation de la clé maître n’a pas eu lieu. »
« L’erreur a été rapidement identifiée, le commit a été forcé, et nous avons repéré les clés exposées comme devant être révoquées. Cependant, la révocation de la clé maître n’a pas eu lieu. » - Oliver Jensen et Mateo Wang, LiteLLM
Cette négligence a coûté cher. L’attaquant, opérant depuis l’adresse IP 69.48.229[.]143, a découvert cette clé maître et l’a utilisée le 10 octobre 2026 pour accéder à la plateforme Agent Platform. Une fois à l’intérieur, il a extrait un token OAuth GitHub CLI que la plateforme utilisait pour permettre aux agents cloud de soumettre des pull requests sur les dépôts GitHub. Le token n’était limité à aucune portée, ce qui signifie qu’il donnait un accès de niveau owner à l’ensemble de l’organisation GitHub de LiteLLM.
Qu’est-ce que la clé maître LiteLLM ?
La clé maître de LiteLLM est une clé d’API utilisée pour authentifier l’accès à la plateforme Agent Platform. Cette plateforme interne orchestre des agents IA capables d’interagir avec des dépôts GitHub, de déclencher des workflows et de collecter des métriques. En exposant cette clé, LiteLLM a offert aux attaquants un point d’entrée direct vers l’ensemble de leur infrastructure CI/CD et de leurs secrets.
Escalade de privilèges : du token OAuth au contrôle total de l’organisation
Le token OAuth volé était critique : il était associé au compte du propriétaire de l’organisation LiteLLM sur GitHub et n’avait aucune restriction de portée. Cela signifie que l’attaquant a obtenu un accès de niveau « owner » à tous les dépôts de l’organisation. Il pouvait lire, écrire, modifier les workflows, et même supprimer des protections de branches.
Avec ce niveau d’accès, l’attaquant a lancé deux séries d’actions :
10 octobre 2026, 22h11 UTC : Il a créé des branches éphémères nommées
ci-tmp-<hex>(par exempleci-tmp-a351cc) sur des dépôts internes (BerriAI/litellm et BerriAI/litellm-auto). Ces branches contenaient un workflow malveillant.github/workflows/cache.ymlconçu pour récolter les tokens GitHub CLI de deux ingénieurs disposant de droits de mainteneur. Les données étaient exfiltrées vers un endpointwebhook[.]site.21 octobre 2026 : Fort de ces nouveaux tokens, l’attaquant a contourné la protection de branche et modifié le pipeline de release pour qu’il pointe vers un dépôt miroir malveillant nommé
Berri-AI/litellm(avec un tiret), au lieu du dépôt officielBerriAI/litellm.
Les workflows malveillants : une ingénierie furtive
Les analyses de la société Socket ont révélé que les deux workflows étaient basés sur un commit légitime récent, rendant leur détection difficile. Voici le schéma type :
- Création d’une branche éphémère
ci-tmp-<hex>à partir d’un commit récent. - Ajout d’un workflow
cache.ymlavec le message « ci: bump cache config ». - Le workflow était déclenché automatiquement sur chaque push (événement
on: [push]). - Après exécution, la branche était supprimée.
Ce procédé ne laisse quasiment aucune trace dans l’historique standard du dépôt. Les tokens et clés collectés par le premier run incluaient :
- tokens GitHub OAuth des ingénieurs
- clés API pour l’espace de travail Linear
- identifiants de déploiement LiteLLM
- clé API Together AI
- identifiant et clé de signature d’une GitHub App
Le second run, le 12 octobre, a élargi la collecte à d’autres services critiques : Anthropic, OpenAI, AWS Bedrock, Tavily, et même la clé API GitGuardian de la plateforme de détection de secrets. L’attaquant a également capturé l’état de session Playwright (permettant un accès authentifié à Linear sans MFA), ainsi que des informations de connexion PostgreSQL et Redis.
« Un token GitHub et une clé privée d’application GitHub sont des identifiants pour la plateforme qui héberge le dépôt, pas pour un service tiers. GITGUARDIAN_API_KEY est un identifiant pour la plateforme de scanning de secrets elle-même, ce qui donne à l’attaquant une visibilité sur les alertes qui auraient pu détecter cette activité. » - Karlo Zanki, Socket
Tableau comparatif des deux runs de vol de secrets
| Run | Date (UTC) | Endpoint webhook.site | Secrets ciblés |
|---|---|---|---|
| #1 | 10 oct. 2026, 22h11 | webhook.site/65a42464-… | GitHub tokens, Linear, Together AI, GitHub App |
| #2 | 12 oct. 2026 | webhook.site/4da03473-… | Anthropic, OpenAI, AWS Bedrock, Tavily, GitGuardian, Playwright, PostgreSQL, Redis |
La version malveillante publiée
Une fois les tokens des ingénieurs en sa possession et le pipeline détourné, l’attaquant a déclenché une release. Normalement, le processus de construction et de publication exigeait l’approbation d’un ingénieur autorisé et d’un compte spécial verrouillé sur un appareil physique dans les bureaux de LiteLLM. Mais cette restriction avait été assouplie pour permettre des releases plus fréquentes, autorisant deux ingénieurs à déclencher et approuver. L’attaquant a utilisé un token pour déclencher la release (après avoir redirigé le déploiement vers son dépôt malveillant) et un autre token pour l’approuver.
Le 21 octobre 2026, entre 11h39 et 11h40 UTC, la version 1.107.0 de LiteLLM a été publiée sur PyPI. Dans les minutes suivantes, des images Docker ont été poussées sur Docker Hub et GHCR. Les enregistrements des runs de production et de staging ont été supprimés. L’objectif de l’attaquant était probablement d’effacer toute trace de ses actions avant que la compromission ne soit découverte.
Mécanisme d’exécution automatique du code malveillant
Le package malveillant contenait deux mécanismes :
Un module de vol de credentials : il ciblait les outils de développement (SSH, Git, GitLab), les applications d’IA, les environnements cloud et les navigateurs web. Il collectait également les tokens de gestionnaires de packages (npm, PyPI, pip, Yarn, Maven, Gradle, Composer, RubyGems, Cargo). Les données étaient compressées et envoyées à
litellm[.]dev/healthcheckvia une requête HTTP POST. Ce domaine avait été enregistré le 13 octobre 2026, soit huit jours avant la publication malveillante.Une porte dérobée Unix : lancée comme processus d’arrière-plan, elle allait chercher et exécuter du code arbitraire fourni par l’attaquant toutes les heures.
L’équipe de recherche en sécurité de Microsoft a souligné un point critique : les fichiers de démarrage malveillants étaient placés en dehors du répertoire de l’application LiteLLM, dans des emplacements où Python les exécute automatiquement au démarrage, même si LiteLLM n’était pas importé. Ainsi, le simple lancement de Python dans un environnement affecté activait le code malveillant. Supprimer uniquement les fichiers de l’application ne suffisait pas à éradiquer la menace. L’incident rappelle la technique du Python sitecustomize.py ou du usercustomize.py, souvent négligée dans les audits de sécurité.
Réaction et remédiation
La compromission a été signalée le 21 octobre 2026 à 12h06 UTC par Lidor Machluf, chercheur chez Upwind. PyPI a mis en quarantaine la version 1.107.0 une heure plus tard. Docker Hub a supprimé ou repointé les tags compromis vers des images saines à 14h20 UTC. LiteLLM a depuis révoqué l’ensemble des tokens associés à ses systèmes internes et plateformes partenaires. L’entreprise a également retiré les clés API compromises et a renforcé ses processus de validation des releases.
Cependant, l’incident soulève des questions plus larges. Les workflows d’exfiltration ont fonctionné pendant plusieurs jours avant d’être détectés. L’attaquant a pu collecter des secrets sur plus de 20 services différents. Selon l’ANSSI, ce type d’attaque de la chaîne d’approvisionnement est en hausse de 65 % en 2025 en France, touchant aussi bien les PME que les grands comptes. Les équipes DevOps doivent prendre conscience que la sécurité des pipelines CI/CD n’est plus une option, mais une nécessité opérationnelle.
Enseignements pour la sécurité des CI/CD
Cet incident constitue un cas d’école pour les équipes DevOps et sécurité. Voici les leçons essentielles à en tirer, structurées en actions concrètes.
Liste de bonnes pratiques pour éviter une fuite de clé maître LiteLLM
- Révoquer immédiatement et systématiquement tout secret exposé, même si l’exposition a été brève. La non-révocation de la clé maître a été le maillon faible. Mettez en place des processus automatisés de révocation dès la détection d’une fuite.
- Restreindre la portée des tokens OAuth et des clés GitHub. Un token owner-level ne devrait jamais être utilisé pour des tâches automatisées. Appliquez le principe du moindre privilège : chaque token doit être limité aux seuls dépôts et actions nécessaires.
- Surveiller la création de branches éphémères et l’ajout de nouveaux workflows, surtout sur les dépôts sensibles. Les solutions de détection d’anomalies dans les pipelines CI/CD peuvent repérer ce type de comportement. Utilisez des alertes en temps réel.
- Ne pas assouplir les procédures de validation des releases sans mesure compensatoire. L’assouplissement temporaire a permis à l’attaquant de faire approuver sa version malveillante. Maintenez toujours une validation multi-facteurs pour les releases critiques.
- Sauvegarder et surveiller les logs de runs CI/CD. La suppression des enregistrements par l’attaquant a compliqué l’investigation. Stockez les logs dans un SIEM ou un outil centralisé avec rétention longue.
- Segmenter les accès aux plateformes de détection de secrets. Le vol de la clé API GitGuardian a privé l’équipe de visibilité sur ses propres alertes. Isolez les services de sécurité avec des accès dédiés et des clés à usage unique.
- Utiliser des outils de scanning de secrets dans les pipelines (GitGuardian, truffleHog, Gitleaks) avec des alertes en temps réel pour détecter les fuites avant qu’elles ne soient exploitées.
- Former les développeurs à la sécurité des secrets : l’erreur humaine est à l’origine de la fuite initiale. Une sensibilisation régulière aux bonnes pratiques de gestion des clés et tokens est indispensable.
Application au contexte français
En France, la réglementation RGPD et les recommandations de l’ANSSI imposent une gestion rigoureuse des accès et des secrets. Les entreprises françaises utilisant des dépendances open source doivent non seulement auditer leurs propres pipelines, mais aussi surveiller les incidents touchant des projets upstream comme LiteLLM. L’incident démontre qu’une négligence dans la gestion d’une clé maître peut compromettre toute une chaîne d’approvisionnement. Les DSI doivent intégrer ces risques dans leur cartographie des menaces et prévoir des procédures de réponse aux incidents spécifiques aux fuites de secrets.
Conclusion : sécuriser sa chaîne d’approvisionnement face aux fuites de clés
L’affaire LiteLLM illustre parfaitement comment une clé maître non révoquée, combinée à des tokens OAuth aux privilèges excessifs et à un assouplissement des procédures de release, peut permettre à un attaquant de prendre le contrôle d’une chaîne d’approvisionnement logicielle. Pour les organisations françaises qui utilisent des dépendances open source, cet incident rappelle l’importance de vérifier l’intégrité des packages téléchargés et de maintenir une politique de secrets rigoureuse.
La clé maître LiteLLM n’aurait jamais dû rester active après sa divulgation. Les leçons de cet incident doivent être intégrées dans toute politique de sécurité DevOps : révoquer, restreindre, surveiller. En 2025, alors que les attaques sur la chaîne d’approvisionnement se multiplient (SolarWinds, Codecov, maintenant LiteLLM), la vigilance est plus que jamais de mise. Vérifiez vos secrets, auditez vos pipelines, et n’assouplissez jamais les processus critiques sans contre-mesures.
En adoptant une approche proactive de la gestion des secrets, en formant vos équipes et en déployant des outils de détection adaptés, vous réduirez considérablement le risque de subir une compromission similaire. N’attendez pas qu’une clé maître fuite pour agir : mettez en place dès aujourd’hui une politique de sécurité des CI/CD digne de ce nom.