système : OPÉRATIONNEL
← retour à tous les hacks
INFRASTRUCTURE CRITICAL NEW

LiteLLM CVE-2026-42271 : les endpoints de test MCP mènent à une RCE non authentifiée

Divulguée en avril comme une injection de commande authentifiée, la fonction d'aperçu MCP de LiteLLM devient une RCE non authentifiée une fois chaînée au contournement BadHost de Starlette — ajoutée au KEV de la CISA le 8 juin 2026.

2026-06-10 // 6 min affects: litellm-proxy, starlette, ai-gateways

De quoi s’agit-il ?

Le 8 juin 2026, la CISA a ajouté CVE-2026-42271 à son catalogue Known Exploited Vulnerabilities, confirmant qu’une faille d’injection de commande dans LiteLLM — la passerelle IA open source très répandue qui regroupe de nombreux fournisseurs de modèles derrière une API unique compatible OpenAI — est exploitée dans la nature. Les agences fédérales civiles américaines ont reçu l’ordre de corriger d’ici le 22 juin 2026.

Ce qui rend ce cas notable, ce n’est pas le bug seul mais sa chaîne. CVE-2026-42271 a été divulguée publiquement en avril 2026 comme une injection de commande authentifiée. Le 1er juin 2026, les chercheurs de Horizon3.ai ont montré qu’en la combinant à CVE-2026-48710 — le contournement de validation d’en-tête Host « BadHost » de Starlette — l’exigence d’authentification disparaît entièrement, transformant un bug réservé aux administrateurs en exécution de code à distance non authentifiée, avec un score CVSS combiné de 10,0. C’est la deuxième faille LiteLLM ajoutée au KEV en un mois, après l’injection SQL CVE-2026-42208.

Comment ça marche

La surface vulnérable est la fonction d’aperçu de serveur MCP de LiteLLM. Deux endpoints servant à tester un serveur MCP avant de l’enregistrer —

POST /mcp-rest/test/connection
POST /mcp-rest/test/tools/list

— acceptent une configuration de serveur complète dans le corps de la requête, dont les champs command, args et env utilisés par le transport stdio. Lorsque l’endpoint tente de « se connecter », il lance la commande fournie comme sous-processus sur l’hôte du proxy, avec les privilèges du processus LiteLLM. Ces endpoints n’étaient protégés que par une clé d’API proxy valide, sans vérification de rôle : n’importe quel utilisateur authentifié — même titulaire d’une clé interne à faible privilège — pouvait exécuter des commandes sur l’hôte. C’est le même danger de conception le transport stdio lance un processus que nous avons traité dans RCE par transport stdio MCP.

La chaîne comble la dernière brèche. BadHost (CVE-2026-48710) est un contournement de validation d’en-tête Host dans Starlette ≤ 1.0.0, le framework ASGI que LiteLLM utilise pour gérer le HTTP. Lorsqu’une authentification repose sur des vérifications d’hôte ou d’origine, BadHost permet de les contourner — la condition « il faut une clé » disparaît donc.

# Conceptuel uniquement — aucun payload fonctionnel.
attaquant --> [contournement en-tête Host BadHost]   # CVE-2026-48710 : pas d'auth
          --> POST /mcp-rest/test/connection          # CVE-2026-42271 : config stdio
          --> sous-processus lancé en tant que proxy LiteLLM  # commande sur l'hôte

Une exploitation réussie permet d’exécuter des commandes sur l’hôte de la passerelle, de lire les identifiants des fournisseurs de modèles et les clés d’API stockées par le proxy, et de pivoter dans l’infrastructure IA connectée.

Pourquoi c’est important

Une passerelle IA est par nature une cible de grande valeur : elle concentre les clés de tous les fournisseurs de modèles utilisés par une organisation et se trouve en ligne sur une grande partie du trafic interne. Une RCE non authentifiée à cet endroit est un moteur de vol d’identifiants et de mouvement latéral, pas seulement la compromission d’un hôte. L’exposition est aggravée par le fait que le déclencheur est une fonction de confort — prévisualiser un serveur MCP avant de l’enregistrer — que beaucoup d’exploitants ne considéreraient pas comme sensible.

Notez l’écart de statut confirmé entre les deux CVE : la CISA confirme l’exploitation active de CVE-2026-42271 elle-même, mais à la date de divulgation il n’y avait aucune confirmation publique que les attaquants utilisent le contournement BadHost dans les mêmes campagnes. Les défenseurs doivent supposer la chaîne exploitable et corriger les deux failles, plutôt que d’attendre cette confirmation.

Défenses

  • Corrigez les deux composants. Passez LiteLLM à la v1.83.7 ou ultérieure (qui restreint les endpoints de test au rôle PROXY_ADMIN et met à jour Starlette) et Starlette à la v1.0.1 ou ultérieure.
  • Si vous ne pouvez pas corriger immédiatement : bloquez l’accès externe à /mcp-rest/test/connection et /mcp-rest/test/tools/list, restreignez la passerelle aux segments réseau de confiance, et renouvelez tous les identifiants détenus par le proxy — supposez que les clés sont déjà exposées.
  • N’exposez pas la passerelle à Internet. Un proxy IA détenant des clés de fournisseurs doit rester derrière une authentification et des contrôles réseau, pas sur une IP publique.
  • Chassez les IOC publiés par Horizon3 : requêtes vers les deux endpoints de test MCP, valeurs d’en-tête Host inhabituelles (abus possible de BadHost), et exécutions de sous-processus inattendues depuis le processus LiteLLM.
  • Traitez la config du transport stdio comme de l’exécution de code. Toute fonction qui accepte un command/args et lance un sous-processus est une primitive de RCE ; protégez-la par une autorisation forte, jamais par une simple clé d’API.

Statut

ÉlémentDétail
CVE-2026-42271Injection de commande dans les endpoints de test MCP de LiteLLM (auth, à l’origine)
CVE-2026-48710Contournement de validation d’en-tête Host « BadHost » de Starlette (≤ 1.0.0)
CVSS chaîné10,0 (RCE non authentifiée), selon Horizon3.ai
AffectéLiteLLM 1.74.2–1.83.6 ; Starlette ≤ 1.0.0
Corrigé dansLiteLLM v1.83.7 ; Starlette v1.0.1
DivulgationCVE-2026-42271 : avr. 2026 · BadHost : 26 mai 2026 · chaîne : 1er juin 2026
KEV / échéanceAjout au KEV de la CISA le 8 juin 2026 ; correction fédérale d’ici le 22 juin 2026

Sources