CVE-2026-5760 (CVSS 9,8) : exécution de code arbitraire dans SGLang via un fichier GGUF piégé
CVE-2026-5760 affecte SGLang 0.59 : injection SSTI Jinja2 non sandbox sur /v1/rerank permet l'RCE via un GGUF malveillant. CVSS 9,8, aucun patch officiel disponible — mitigation manuelle requise.

Contexte
Les frameworks d'inférence LLM sont devenus une surface d'attaque critique. Le 20 avril 2026, CERT/CC coordonne la divulgation de CVE-2026-5760, une vulnérabilité de code injection de score CVSS 9,8 dans SGLang — l'un des runtimes LLM haute performance les plus utilisés en production pour servir des modèles open source. Le vecteur est inhabituel et préoccupant : l'attaque transite par un fichier de modèle GGUF spécialement forgé, ce qui signifie qu'un simple téléchargement depuis un dépôt communautaire non vérifié peut déboucher sur une prise de contrôle complète du serveur d'inférence.
Cette vulnérabilité appartient à une classe bien documentée sur les runtimes LLM : le CVE-2024-34359 (Llama Drama, llama_cpp_python, CVSS 9,7) et le CVE-2025-61620 (vLLM) exploitaient le même vecteur GGUF/Jinja2.
Points clés
- Endpoint vulnérable :
/v1/rerank— l'API de reclassification utilisée dans les pipelines RAG - Mécanisme : injection SSTI (Server-Side Template Injection) dans le champ
tokenizer.chat_templated'un fichier GGUF malveillant - Déclencheur : une phrase associée au reranker Qwen3 active le chemin vulnérable dans
entrypoints/openai/serving_rerank.py - Cause racine :
jinja2.Environment()utilisé sans sandboxing au lieu deImmutableSandboxedEnvironment - Impact : exécution de code arbitraire dans le contexte du processus SGLang
- Versions affectées : SGLang ≤ 0.59
- Patch officiel : aucun — les mainteneurs n'ont fourni ni réponse ni correctif lors de la coordination CERT/CC
Chaîne d'exploitation
L'attaquant construit un fichier GGUF avec un tokenizer.chat_template contenant un payload Jinja2. Lors du chargement du modèle, SGLang lit ce template. Dès qu'une requête atteint /v1/rerank, le template est rendu sans sandbox, exécutant le code Python arbitraire embarqué — y compris des appels système.
Le scénario le plus réaliste : un modèle communautaire malveillant posté sur HuggingFace Hub ou ModelScope, téléchargé par un opérateur sans vérification de l'intégrité du fichier. Dans les architectures multi-tenant où SGLang sert plusieurs équipes, la compromission d'un seul endpoint expose l'ensemble du nœud.
Mitigation (sans patch officiel)
- Remplacer
jinja2.Environment()parjinja2.sandbox.ImmutableSandboxedEnvironment()dans le source SGLang - Bloquer l'endpoint
/v1/reranksi le reranking n'est pas utilisé (règle nginx ou pare-feu applicatif) - Vérifier systématiquement le checksum (SHA-256) des fichiers GGUF avant chargement, et ne charger que depuis des sources de confiance
- Surveiller les appels syscall anormaux depuis le processus SGLang (via seccomp, Falco ou équivalent)
- Mettre à jour vers la prochaine release dès qu'un patch officiel est publié — suivre le dépôt sgl-project/sglang pour les advisories
Disclosure CERT/CC via CIRCL · PT Security advisory · The Hacker News