sistema: OPERATIVO
← volver a todos los hacks
AGENTS CRITICAL NEW

CVE-2026-0755: inyección de comandos y robo de archivos en gemini-mcp-tool

Un aviso del 18 de junio de 2026 detalla cómo el popular gemini-mcp-tool dejaba que una entrada no confiable llegara al shell y al parser @file de Gemini CLI — RCE CVSS 9.8 y exfiltración de archivos, corregido en 1.1.6.

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

¿Qué es esto?

El 18 de junio de 2026, la GitLab Advisory Database publicó CVE-2026-0755, un fallo crítico en gemini-mcp-tool — un paquete npm comunitario (repositorio jamubc/gemini-mcp-tool) que expone la CLI de Gemini de Google a los asistentes de IA como un servidor Model Context Protocol. El aviso tiene una puntuación CVSS 9.8 (CRÍTICA) y se clasifica como CWE-78, inyección de comandos del sistema operativo. También se emitió como ZDI-26-021 y se rastrea como GHSA-4h5r-5jm8-jxjm.

No se trata de un jailbreak del modelo. Es una inyección clásica que reside dentro de una cadena de herramientas de agente: el texto no confiable que un asistente entrega al servidor MCP se traslada a un shell y al parser de archivos de Gemini CLI sin una neutralización adecuada. Todas las versiones desde la 1.1.2 hasta (sin incluir) la 1.1.6 están afectadas, y la corrección llegó en la 1.1.6.

Cómo funciona

La tarea de un servidor MCP es tomar las instrucciones de un cliente de IA y convertirlas en acciones — aquí, invocar la CLI gemini. Las versiones vulnerables construían esa línea de comandos de una forma que no separaba con seguridad los datos (el texto del usuario o del documento) de la estructura del comando. De ahí surgieron dos problemas distintos.

El primero es la exfiltración de archivos arbitrarios. Gemini CLI admite una sintaxis @file que inserta el contenido de un archivo en el prompt. Como la entrada no confiable podía llegar a ese parser sin control, una cadena controlada por el atacante podía referenciar archivos muy fuera del espacio de trabajo previsto — el aviso cita ejemplos como la lectura de archivos del sistema o de secretos mediante rutas como @/etc/passwd, @~/.ssh/id_rsa o @../../secret. El contenido del archivo se incorpora entonces al contexto del modelo y puede ser reenviado al exterior.

El segundo es la inyección de comandos del SO en Windows. La herramienta dependía de un encuadre con comillas dobles shell:false defectuoso que no neutralizaba los metacaracteres de cmd.exe. Caracteres especiales sin escapar en la entrada podían salirse del argumento previsto y ejecutar comandos elegidos por el atacante.

# Flujo de datos conceptual — NO es un payload funcional
Cliente IA ──(prompt / texto de documento no confiable)──▶ gemini-mcp-tool
        construye la línea de comandos con escapado inseguro
              ├─▶ parser @file de Gemini CLI ──▶ lee [REDACTED ruta arbitraria]
              └─▶ cmd.exe (Windows)           ──▶ ejecuta [REDACTED comando inyectado]

Es la combinación lo que vuelve esto peligroso en un entorno de agente. Un asistente que resume una página web, lee un repositorio o procesa un correo manipula de forma rutinaria contenido controlado por un atacante — la superficie clásica de la inyección indirecta de prompts. Cuando ese contenido puede dirigir una herramienta para leer secretos o ejecutar comandos, se cumple el trío letal — datos privados, entrada no confiable y una vía de exfiltración — sin que el modelo haya sido nunca «jailbreakeado».

Por qué importa

Los servidores MCP son código de pegamento, y es en ese código donde se difuminan los límites de confianza. Aquí el modelo se comporta correctamente; el fallo es un manejo de entrada ordinario en el puente entre el agente y el sistema operativo. Es el mismo patrón que Microsoft señaló cuando los prompts se convierten en shells: en cuanto una entrada en lenguaje natural se concatena en un comando, vuelven a aplicarse décadas de lecciones sobre inyección de comandos — salvo que esa «entrada del usuario» llega ahora de forma indirecta, a través del documento o el sitio que se pidió leer al agente.

El radio de impacto depende de dónde se ejecute el servidor. En el portátil de un desarrollador puede significar fuga de claves SSH y credenciales en la nube; en CI o en un runtime de agente compartido puede significar ejecución de código con los privilegios que tenga el proceso MCP. Como el paquete está en el grafo de dependencias npm de las configuraciones de agente, también es una exposición de cadena de suministro: muchos usuarios nunca auditan los servidores MCP de terceros que conectan a su asistente.

Defensas

  1. Actualice ya. Lleve gemini-mcp-tool a la 1.1.6 o posterior. La corrección eliminó el encuadre con comillas dobles shell:false defectuoso, añadió una comprobación assertSafeFileReferences() para confinar las referencias @file al directorio de trabajo y endureció el escapado de argumentos de cmd.exe en Windows.
  2. Nunca construya líneas de comandos shell a partir del texto del prompt. Pase los argumentos como un arreglo argv a una API de ejecución sin shell; evite la interpolación de cadenas en cmd.exe//bin/sh. Trate como no confiable toda cadena derivada del modelo o de un documento.
  3. Confine el acceso a archivos. Toda inserción de tipo @file debe canonicalizarse y restringirse a un directorio explícitamente permitido, rechazando la traversía (../) y las rutas absolutas a ubicaciones sensibles.
  4. Mínimo privilegio para los servidores MCP. Ejecute cada servidor con una cuenta de bajos privilegios, en un sandbox o contenedor, sin credenciales en la nube ni claves SSH en su alcance. Véase el transporte stdio de MCP es RCE por diseño para entender por qué el límite que importa es el runtime, no el modelo.
  5. Inventaríe y fije su cadena de suministro MCP. Registre qué servidores MCP de terceros están instalados, fije versiones y suscríbase a avisos (GHSA, NVD, fuentes de proveedores) para que un CVSS 9.8 en código de pegamento no quede sin parchear.
  6. Añada escaneo de dependencias y de inyección de comandos. Las herramientas SCA señalan versiones vulnerables; el análisis estático de la construcción de comandos shell detecta la siguiente instancia antes de que se publique.

Estado

ElementoReferenciaFechaNotas
Aviso (GLAD)CVE-2026-07552026-06-18Inyección de comandos del SO + exfiltración @file, CVSS 9.8
Ficha NVDCVE-2026-07552026-06CWE-78 inyección de comandos del SO
Aviso ZDIZDI-26-0212026RCE en execAsync, sin autenticación
Versiones afectadas>=1.1.2, <1.1.6Corregido en 1.1.6

La lección no es «MCP es inseguro». Es más estrecha y más antigua: una cadena de herramientas de agente que concatena texto no confiable en un comando shell o en un parser de archivos es una inyección a la espera de ocurrir. Sanee en el límite, confine el acceso a archivos y ejecute el servidor con el mínimo privilegio suficiente para su tarea.

Sources