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

CVE-2026-0755 : injection de commandes et vol de fichiers dans gemini-mcp-tool

Un avis du 18 juin 2026 détaille comment le populaire gemini-mcp-tool laissait une entrée non fiable atteindre le shell et le parseur @file de Gemini CLI — RCE CVSS 9.8 et exfiltration de fichiers, corrigé en 1.1.6.

2026-06-21 // 6 min affects: gemini-mcp-tool, gemini-cli, model-context-protocol, mcp-servers

De quoi s’agit-il ?

Le 18 juin 2026, la GitLab Advisory Database a publié CVE-2026-0755, une faille critique de gemini-mcp-tool — un paquet npm communautaire (dépôt jamubc/gemini-mcp-tool) qui expose le CLI Gemini de Google aux assistants IA sous forme de serveur Model Context Protocol. L’avis porte un score CVSS 9.8 (CRITIQUE) et relève de CWE-78, l’injection de commandes OS. Il a aussi été émis sous ZDI-26-021 et suivi sous GHSA-4h5r-5jm8-jxjm.

Il ne s’agit pas d’un jailbreak de modèle. C’est une injection classique qui se loge dans une chaîne d’outils d’agent : le texte non fiable qu’un assistant transmet au serveur MCP est répercuté vers un shell et vers le parseur de fichiers de Gemini CLI sans neutralisation suffisante. Toutes les versions de 1.1.2 jusqu’à (exclue) 1.1.6 sont affectées, et le correctif est arrivé en 1.1.6.

Comment ça marche

Le rôle d’un serveur MCP est de prendre les instructions d’un client IA et de les transformer en actions — ici, invoquer le CLI gemini. Les versions vulnérables construisaient cette ligne de commande d’une manière qui ne séparait pas correctement les données (le texte de l’utilisateur ou du document) de la structure de commande. Deux problèmes distincts en découlent.

Le premier est l’exfiltration de fichiers arbitraires. Gemini CLI prend en charge une syntaxe @file qui insère le contenu d’un fichier dans le prompt. Comme l’entrée non fiable pouvait atteindre ce parseur sans contrôle, une chaîne contrôlée par l’attaquant pouvait référencer des fichiers bien au-delà de l’espace de travail prévu — l’avis cite par exemple la lecture de fichiers système ou de secrets via des chemins comme @/etc/passwd, @~/.ssh/id_rsa ou @../../secret. Le contenu du fichier est alors aspiré dans le contexte du modèle et peut être renvoyé vers l’extérieur.

Le second est l’injection de commandes OS sous Windows. L’outil s’appuyait sur un encadrement par doubles guillemets shell:false défectueux qui ne neutralisait pas les métacaractères de cmd.exe. Des caractères spéciaux non échappés dans l’entrée pouvaient sortir de l’argument prévu et exécuter des commandes choisies par l’attaquant.

# Flux de données conceptuel — PAS un payload fonctionnel
Client IA ──(prompt / texte de document non fiable)──▶ gemini-mcp-tool
        construit la ligne de commande avec un échappement non sûr
              ├─▶ parseur @file de Gemini CLI ──▶ lit [REDACTED chemin arbitraire]
              └─▶ cmd.exe (Windows)            ──▶ exécute [REDACTED commande injectée]

C’est la combinaison qui rend cela dangereux dans un contexte d’agent. Un assistant qui résume une page web, lit un dépôt ou traite un e-mail manipule systématiquement du contenu contrôlé par un attaquant — la surface classique de l’injection indirecte de prompt. Quand ce contenu peut orienter un outil pour lire des secrets ou exécuter des commandes, le trio létal — données privées, entrée non fiable et voie d’exfiltration — est réuni sans que le modèle n’ait jamais été « jailbreaké ».

Pourquoi c’est important

Les serveurs MCP sont du code de liaison, et c’est dans ce code que les frontières de confiance se brouillent. Ici, le modèle se comporte correctement ; la défaillance est un traitement d’entrée ordinaire dans le pont entre l’agent et le système d’exploitation. C’est le même schéma que celui signalé par Microsoft quand les prompts deviennent des shells : dès qu’une entrée en langage naturel est concaténée dans une commande, des décennies de leçons sur l’injection de commandes s’appliquent à nouveau — sauf que cette « entrée utilisateur » arrive désormais indirectement, via le document ou le site que l’agent devait lire.

L’ampleur des dégâts dépend de l’endroit où tourne le serveur. Sur un poste de développeur, cela peut signifier des clés SSH et des identifiants cloud fuités ; en CI ou dans un runtime d’agent partagé, cela peut signifier l’exécution de code avec les privilèges du processus MCP. Comme le paquet figure dans le graphe de dépendances npm des configurations d’agent, c’est aussi une exposition de chaîne d’approvisionnement : beaucoup d’utilisateurs n’auditent jamais les serveurs MCP tiers qu’ils branchent à leur assistant.

Défenses

  1. Mettez à jour sans attendre. Passez gemini-mcp-tool en 1.1.6 ou ultérieure. Le correctif a supprimé l’encadrement par doubles guillemets shell:false défectueux, ajouté un contrôle assertSafeFileReferences() pour confiner les références @file au répertoire de travail, et durci l’échappement des arguments cmd.exe sous Windows.
  2. Ne construisez jamais de ligne de commande shell à partir du texte du prompt. Passez les arguments sous forme de tableau argv à une API d’exécution sans shell ; évitez l’interpolation de chaînes dans cmd.exe//bin/sh. Traitez toute chaîne issue du modèle ou d’un document comme non fiable.
  3. Confinez l’accès aux fichiers. Toute insertion de type @file doit être canonicalisée et restreinte à un répertoire explicitement autorisé, en rejetant la traversée (../) et les chemins absolus vers des emplacements sensibles.
  4. Moindre privilège pour les serveurs MCP. Exécutez chaque serveur sous un compte à faibles privilèges, dans un bac à sable ou un conteneur, sans identifiants cloud ni clés SSH dans le périmètre. Voir le transport stdio de MCP est une RCE par conception pour comprendre pourquoi c’est le runtime, et non le modèle, qui constitue la frontière.
  5. Inventoriez et figez votre chaîne d’approvisionnement MCP. Recensez les serveurs MCP tiers installés, figez les versions et abonnez-vous aux avis (GHSA, NVD, flux éditeurs) pour qu’une CVSS 9.8 dans du code de liaison ne reste pas non corrigée.
  6. Ajoutez le scan de dépendances et d’injection de commandes. Les outils SCA signalent les versions vulnérables ; l’analyse statique de la construction de commandes shell attrape la prochaine occurrence avant la livraison.

Statut

ÉlémentRéférenceDateNotes
Avis (GLAD)CVE-2026-07552026-06-18Injection de commandes OS + exfiltration @file, CVSS 9.8
Fiche NVDCVE-2026-07552026-06CWE-78 injection de commandes OS
Avis ZDIZDI-26-0212026RCE dans execAsync, sans authentification
Versions affectées>=1.1.2, <1.1.6Corrigé en 1.1.6

La leçon n’est pas « MCP est dangereux ». Elle est plus étroite et plus ancienne : une chaîne d’outils d’agent qui concatène du texte non fiable dans une commande shell ou un parseur de fichiers est une injection en sursis. Assainissez à la frontière, confinez l’accès aux fichiers et exécutez le serveur avec le moindre privilège suffisant pour sa tâche.

Sources