CVE-2026-22807 : exécution de code à distance pré-authentification dans le chargeur de modules dynamiques auto-map de vLLM
SCORE DE MENACE HERMES & COMPROMISSION DU PÉRIMÈTRE
Cible :Cœur d'inférence LLM, grappes GPU & infrastructure d'orchestration IA Le standard CVSS v3.1 attribue à la CVE-2026-22807 un score de 9.8 Critique (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H). Le Hermes Threat Score lui assigne la note de 94 (CRITIQUE). vLLM constitue le moteur d'inférence open source haute performance standard de l'écosystème IA d'entreprise. L'exécution dynamique liée à auto_map intervient avant toute authentification d'API, permettant à un dépôt de modèle empoisonné sur Hugging Face ou un registre interne de compromettre l'hôte GPU et d'exfiltrer les poids, les secrets cloud et les données des locataires.
SÉVÉRITÉ AGENTIQUE HASS & IMPACT SUR L'ISOLATION DES AGENTS
Cible :Chargeur de modèle vLLM & résolveur de modules dynamiques Transformers Les agents IA autonomes et les pipelines MLOps automatisés déploient dynamiquement des serveurs d'inférence et chargent des poids de modèles selon les requêtes d'utilisateurs ou les tâches d'évaluation. L'absence de restriction sur auto_map permet à un manifeste malveillant de s'échapper du bac à sable de l'agent et de détourner l'ensemble des flux d'exécution.
CVE-2026-22807: vLLM Dynamic Module Auto-Map Pre-Auth Remote Code ExecutionVULNÉRABILITÉ
Software platform affected by security vulnerabilities and agentic attack patterns.
🔍 Pourquoi cette relation ? (Preuves & Provenance)
“Confirmed security vulnerability in vLLM Inference Engine documented in Hermes dossier.”
- [vulnerability_report]
- [government_confirmation]CISA verified active exploitation in the wild and mandated federal remediation deadline in KEV entry. — Source : Cybersecurity & Infrastructure Security Agency (CISA): CISA Adds CVE-2026-59822 to Known Exploited Vulnerabilities Catalog (Fiabilité : VERY_HIGH)
Cascading multi-stage attack chaining context injection, autonomous loop planning, and un-sandboxed execution sinks to achieve persistent root shell compromise on host machines.
🔍 Pourquoi cette relation ? (Preuves & Provenance)
“CVE-2026-22807 weaponizes the agentic attack pattern formalized under AAP-007.”
- [technical_analysis]Pillar Security demonstrated that executing export BASH_ENV in Auto-Run causes bash to source hostile payloads upon subsequent commands. — Source : Pillar Security Research: Bypassing Cursor Auto-Run: When Shell Built-ins Lead to Host RCE (Fiabilité : HIGH)
Attacker registers rogue MCP tools or skills with weaponized docstrings and deceptive metadata that trick the model into routing sensitive user tasks to attacker-controlled functions.
🔍 Pourquoi cette relation ? (Preuves & Provenance)
“CVE-2026-22807 weaponizes the agentic attack pattern formalized under AAP-004.”
- [technical_analysis]Pillar Security demonstrated that executing export BASH_ENV in Auto-Run causes bash to source hostile payloads upon subsequent commands. — Source : Pillar Security Research: Bypassing Cursor Auto-Run: When Shell Built-ins Lead to Host RCE (Fiabilité : HIGH)
1. Contexte technique et matrice des versions affectées
Section intitulée « 1. Contexte technique et matrice des versions affectées »vLLM permet le chargement direct de modèles depuis Hugging Face Hub, des répertoires locaux ou des compartiments S3 via son intégration avec transformers.
| Paramètre | Spécification technique | Impact opérationnel |
|---|---|---|
| Identifiant CVE | CVE-2026-22807 | Avis de sécurité vLLM GHSA-vllm-automap |
| Classe de vulnérabilité | Injection de code (CWE-94) / Chargement non fiable (CWE-829) | Exécution arbitraire de scripts Python au chargement du modèle |
| Composant vulnérable | vllm/model_executor/model_loader.py & résolution AutoConfig | Analyse de la configuration du modèle et importation dynamique |
| Vecteur d’exploitation | Fichier config.json malveillant avec clé auto_map pointant vers un fichier .py | RCE pré-authentification déclenchée au démarrage du worker |
| Privilèges requis | Aucun (PR:N) | Déclenché avant la couche d’authentification API |
| Privilèges obtenus | Utilisateur système hôte (uid du service vLLM / root en conteneur) | Accès intégral aux calculs GPU, mémoire hôte et clés d’API |
| Versions affectées | vLLM >= 0.10.1 et < 0.14.0 | Serveurs d’inférence, pods Kubernetes GPU, clusters Ray |
| Correctifs publiés | vLLM 0.14.0 et 0.14.1 | Contrôle strict du flag de confiance et validation des modules |
2. Anatomie de la vulnérabilité et analyse de la cause racine
Section intitulée « 2. Anatomie de la vulnérabilité et analyse de la cause racine »Importation dynamique non assainie via auto_map
Section intitulée « Importation dynamique non assainie via auto_map »Dans l’écosystème Hugging Face, un auteur de modèle peut définir une architecture sur-mesure en fournissant les classes Python directement dans le dépôt. Le fichier config.json contient une section auto_map :
{ "architectures": ["AdversarialCausalLM"], "auto_map": { "AutoConfig": "configuration_adversarial.AdversarialConfig", "AutoModelForCausalLM": "modeling_adversarial.AdversarialForCausalLM" }}Dans le code de vLLM (vllm/model_executor/model_loader.py), la vérification de l’option de sécurité trust_remote_code était contournée lors de l’appel au résolveur de classes personnalisées :
# Chargeur vulnérable de configuration de modèle dans vLLMdef _get_model_architecture(model_config: ModelConfig): hf_config = get_config(model_config.model, trust_remote_code=model_config.trust_remote_code)
# ANOMALIE : Si auto_map est défini, vLLM résout la classe via une importation dynamique # sans transmettre la restriction trust_remote_code à l'importateur sous-jacent if hasattr(hf_config, "auto_map") and "AutoModelForCausalLM" in hf_config.auto_map: custom_class_path = hf_config.auto_map["AutoModelForCausalLM"] module_name, class_name = custom_class_path.rsplit(".", 1)
# FAILLE : dynamic_import_hub_module télécharge et importe le bytecode Python, # exécutant le code racine de modeling_adversarial.py dès son importation ! custom_module = dynamic_import_hub_module( model_id=model_config.model, module_file=f"{module_name}.py" ) return getattr(custom_module, class_name)Puisque l’évaluation d’un module par importlib exécute immédiatement toute instruction située au niveau racine du script Python, un code malveillant placé en dehors des classes s’exécute avec les pleins droits du processus vLLM dès la tentative de chargement.
3. Vecteurs d’attaque et cinématique forensique d’exécution
Section intitulée « 3. Vecteurs d’attaque et cinématique forensique d’exécution »sequenceDiagram autonumber actor Attacker as Attaquant / Menace participant Hub as Hugging Face Hub / Registre participant Agent as Agent IA / Pipeline MLOps participant Loader as Chargeur vLLM participant OS as Système hôte Linux / GPU participant C2 as Serveur C2 adverse
Attacker->>Hub: Publication du dépôt empoisonné (config.json + modeling_adversarial.py) Note over Hub: modeling_adversarial.py contient un reverse shell au niveau racine Agent->>Loader: Commande vllm serve attaquant/modele-piege Loader->>Hub: Téléchargement des poids, de config.json et des scripts Loader->>Loader: Analyse de config.json -> détection de la clé auto_map Loader->>OS: dynamic_import_hub_module() exécute modeling_adversarial.py OS->>C2: Lancement du reverse shell / exfiltration des clés d'API et tokens IAM C2-->>OS: Prise de contrôle persistante du nœud de calcul GPU- Empoisonnement du dépôt de modèle : L’attaquant publie un modèle sur un hub public ou un registre interne compromis, en configurant un pointeur
auto_mapvers un fichiermodeling_adversarial.py. - Armement de la charge utile : Dans
modeling_adversarial.py, du code Python est placé au niveau supérieur du fichier afin de capturer les variables d’environnement (HF_TOKEN,OPENAI_API_KEY, métadonnées cloud AWS/GCP) ou d’ouvrir un socket interactif. - Déclenchement du chargement : Un agent de développement IA autonome ou un opérateur déclenche le service
vllm serve attaquant/modele-piegeou sollicite l’API de permutation de modèle. - Exécution pré-authentification : Avant toute vérification de clé d’API cliente et avant l’allocation de la VRAM, l’importation dynamique charge le fichier
.pyet exécute la charge utile. - Mouvement latéral sur le cluster GPU : L’attaquant obtient un shell interactif au sein du cluster de calcul haute vitesse, accédant aux bus NVLink et aux caches d’inférence d’autres locataires.
4. Investigation forensique et réponse à incident
Section intitulée « 4. Investigation forensique et réponse à incident »Les analystes DFIR intervenant sur un serveur vLLM suspecté de compromission doivent inspecter les artefacts suivants :
Commandes d’investigation sur l’hôte et le conteneur
Section intitulée « Commandes d’investigation sur l’hôte et le conteneur »# 1. Examiner le cache des modules dynamiques Hugging Facefind ~/.cache/huggingface/modules/ -type f -name "*.py" -exec ls -la {} +
# 2. Vérifier les paramètres de commande et drapeaux passés à vLLMps aux | grep vllm | grep -E "model|trust-remote-code"
# 3. Détecter d'éventuels processus enfants anormaux engendrés par Pythonpstree -p $(pgrep -f "vllm.entrypoints")
# 4. Identifier les sockets réseau sortants inhabituels ouverts par le processus vLLMss -tp | grep -E "python|ray"
# 5. Consulter les appels d'exécution de commandes système via Auditdausearch -p $(pgrep -f "vllm") -m EXECVE -ts today5. Chasse aux menaces et ingénierie de détection
Section intitulée « 5. Chasse aux menaces et ingénierie de détection »title: Processus enfant suspect généré par le moteur d'inférence vLLMid: 22807c02-vllm-automap-rce-frstatus: experimentaldescription: Détecte le lancement d'interpréteurs de commande ou d'outils réseau suspects par le processus vLLM, signalant l'exploitation de la CVE-2026-22807.author: Hermes Codex Detection Engineeringdate: 2026-09-24logsource: category: process_creation product: linuxdetection: selection_parent: ParentCommandLine|contains: - 'vllm.entrypoints' - 'vllm' selection_child: Image|endswith: - '/bin/sh' - '/bin/bash' - '/usr/bin/curl' - '/usr/bin/wget' - '/usr/bin/nc' - '/usr/bin/python3' - '/usr/bin/python' condition: selection_parent and selection_childfalsepositives: - Scripts de surveillance interne exécutés sous une arborescence non conventionnelle.level: criticaltags: - attack.execution - attack.t1059.006 - cve.2026-22807# Règle d'audit surveillant l'écriture et l'exécution dans le cache Hugging Face-w /root/.cache/huggingface/modules/ -p wa -k hf_module_tampering-w /home/*/.cache/huggingface/modules/ -p wa -k hf_module_tampering6. Plan de remédiation et durcissement défensif
Section intitulée « 6. Plan de remédiation et durcissement défensif »Mise à jour de la bibliothèque vLLM
Section intitulée « Mise à jour de la bibliothèque vLLM »Mettre à jour immédiatement vLLM vers la version 0.14.0 ou 0.14.1 :
pip install --upgrade vllm>=0.14.1Durcissement architectural en profondeur
Section intitulée « Durcissement architectural en profondeur »- Blocage systématique du code distant : Ne jamais employer l’argument
--trust-remote-codesans audit préalable et signature cryptographique du modèle. - Registre de modèles étanche et scanné : Interdire l’accès direct des clusters de production au Hugging Face Hub public. Mettre en place un registre interne où les modèles sont inspectés et validés par des analyseurs statiques avant mise à disposition.
- Isolement strict des conteneurs : Exécuter les pods vLLM sous un utilisateur non privilégié (
runAsNonRoot: true), révoquer l’ensemble des capacités Linux (cap_drop: ["ALL"]) et monter le système de fichiers racine en lecture seule (readOnlyRootFilesystem: true).
7. Recherches corrélées et références internes
Section intitulée « 7. Recherches corrélées et références internes »- CVE-2026-7141 : exécution de code dans le gestionnaire de cache KV de vLLM : Corruption mémoire VRAM GPU au sein du moteur PagedAttention.
- CVE-2026-22778 : RCE en chaîne sur l’API multimodale vLLM : Analyse des vulnérabilités de traitement d’images dans vLLM.
- CVE-2026-77521 : évasion de bac à sable dans la plateforme IA MaxKB : Injection de commandes via les outils MCP.
- AAP-007 : RCE autonome en cascade : Compromission multi-étapes se propageant dans les environnements d’exécution des agents.
- AAP-004 : Empoisonnement sémantique d’outils : Exploitation de l’approvisionnement dynamique de dépendances de modèles.
- Sécurité à l’exécution pour agents IA : Principes d’architecture pour l’isolation des environnements d’agents.
- Investigation forensique de la mémoire GPU et du cache KV : Guide méthodologique de réponse à incident sur clusters GPU.
- Analyse des processus et de la mémoire sous Linux : Techniques forensiques sur serveurs d’inférence IA.
Sources et références
Section intitulée « Sources et références »- Avis de sécurité vLLM : GHSA-vllm-automap
- Base de données NIST NVD : Détail de la vulnérabilité CVE-2026-22807
- Red Hat Bugzilla : Avis de sécurité CVE-2026-22807