En bref

  • CVE-2026-5760 (CVSS 9.8) : injection de template Jinja2 dans SGLang conduisant a une execution de code arbitraire cote serveur.
  • Vecteur : modele GGUF malveillant avec un tokenizer.chat_template piege, telecharge depuis un depot public comme Hugging Face.
  • Action urgente : mettre a jour SGLang vers la version corrigee et n'importer que des modeles provenant de sources de confiance signees.

Les faits

La faille CVE-2026-5760 touche SGLang, framework open source tres utilise pour servir des modeles de langage en inference a haute performance. Publiee autour du 20 avril 2026 avec un score CVSS de 9.8 sur 10, elle permet a un attaquant de declencher une execution de code a distance sur le serveur hebergeant le moteur d'inference, simplement en faisant charger un modele GGUF piege par la victime. Selon la communaute de recherche specialisee dans la securite des chaines d'inference IA, le chemin vulnerable se situe dans entrypoints/openai/serving_rerank.py, ou SGLang instancie un environnement Jinja2 standard au lieu de la variante ImmutableSandboxedEnvironment. Quand l'endpoint /v1/rerank est appele, le moteur evalue le chat_template fourni par le modele, ce qui laisse executer n'importe quelle expression Python embarquee dans le template. C'est une variante directe de la famille Llama Drama (CVE-2024-34359) et du meme probleme corrige plus tard dans vLLM.

Le declenchement est d'une simplicite deconcertante : l'attaquant publie sur Hugging Face ou dans un registre prive un modele GGUF dont le fichier tokenizer.chat_template contient une charge utile SSTI, par exemple un acces aux globals Python via le mecanisme MRO pour atteindre os.system. Le template inclut le marqueur declenchant la route Qwen3 reranker. Lorsqu'un utilisateur telecharge ce modele et le charge dans une instance SGLang exposee, la premiere requete legitime envoyee sur /v1/rerank declenche l'evaluation du template empoisonne. Aucune authentification n'est requise dans la configuration standard des deploiements self-hosted, ce qui ouvre la porte a la compromission complete du conteneur d'inference.

Impact et exposition

L'exposition est tres large : SGLang est adopte par de nombreuses equipes MLOps pour servir Llama, Qwen, Mistral et d'autres modeles. Toute instance qui accepte des modeles tiers sans signature ni revue (pipelines CI/CD, plateformes d'experimentation, bac a sable recherche) est potentiellement vulnerable des qu'un ingenieur pointe vers un GGUF non verifie. Le mode d'attaque ne necessite ni identifiant ni position reseau privilegiee ; il suffit d'une chaine de confiance defaillante cote supply chain. Les instances exposant l'API publique d'inference sur Internet aggravent le risque car n'importe quel appelant peut declencher le rendu du template des que le modele compromis est en memoire. Les consequences typiques observees dans cette classe de vulnerabilites incluent exfiltration de cles API, pivot vers les credentials cloud, et deploiement de cryptomineurs sur des GPU couteux.

Recommandations immediates

  • Mettre a jour SGLang vers la version corrigee publiee par les mainteneurs et verifier que serving_rerank.py utilise bien ImmutableSandboxedEnvironment.
  • Auditer tous les modeles GGUF charges en production : inspecter le champ tokenizer.chat_template et refuser tout template contenant des acces a __globals__, __subclasses__, os ou subprocess.
  • Appliquer une allow-list stricte des depots sources et exiger la signature des modeles via Sigstore ou un equivalent interne.
  • Placer les endpoints /v1/rerank derriere une authentification forte et un WAF capable de bloquer les motifs SSTI Jinja2.
  • Surveiller les journaux d'acces reseau sortants des workers d'inference pour detecter toute connexion suspecte.

⚠️ Urgence

Aucune authentification n'etant requise et le PoC etant trivial a reproduire, les equipes doivent considerer cette faille comme critique. Les plateformes d'inference exposees publiquement et chargeant des modeles communautaires sont en premiere ligne.

Comment savoir si mon instance SGLang est vulnerable ?

Verifier la version installee via pip show sglang et comparer avec la version corrigee annoncee par les mainteneurs. Inspecter egalement le code de serving_rerank.py : si la ligne contient jinja2.Environment() sans option de sandboxing, l'instance est exploitable des qu'un modele piege est charge.

Quel lien avec les precedents incidents IA ?

CVE-2026-5760 rejoint une famille grandissante de failles SSTI dans les frameworks d'inference. Voir aussi nos analyses sur PraisonAI sandbox escape, Marimo notebook RCE, aws-mcp-server et Thymeleaf SSTI Java.

Votre infrastructure est-elle exposee ?

Ayi NEDJIMI realise des audits cibles pour identifier et corriger vos vulnerabilites IA et moteurs d'inference.

Demander un audit