Descripción general

Se ha identificado una vulnerabilidad de lectura arbitraria de archivos locales en el componente consult_gemini_with_files de gemini-bridge, específicamente cuando opera en modo inline. La función lee cualquier ruta de archivo proporcionada en el argumento files sin restringirla al directorio de trabajo configurado (directory), y posteriormente reenvía el contenido al CLI de Gemini. Dado que el llamante también controla el parámetro query, el contenido del archivo es devuelto a través del ciclo de comunicación con Gemini y transmitido a Google, lo que convierte esta falla en una divulgación arbitraria de archivos locales.

Componente afectado

La vulnerabilidad reside en los siguientes elementos de la base de código:

  • Herramienta: consult_gemini_with_files(query, directory, files, ...) con mode="inline"
  • Función de lectura: _read_file_for_inline invocada desde _prepare_inline_payload en src/mcp_server.py
  • El modo at_command ya aplicaba correctamente la restricción de rutas; el modo inline no lo hacía.

Causa raíz

La función _resolve_path devolvía rutas fuera del directorio raíz configurado, limitándose únicamente a anular el nombre de visualización sin impedir el acceso real al archivo. La función _prepare_inline_payload procedía a leer el archivo independientemente de si la ruta resuelta se encontraba dentro o fuera del directorio de trabajo autorizado.

Esta implementación defectuosa aceptaba sin restricciones los siguientes vectores de acceso:

  • Rutas absolutas (por ejemplo, /etc/passwd, /root/.ssh/id_rsa)
  • Traversal de directorios mediante secuencias ..
  • Escapado mediante enlaces simbólicos (symlink escapes)

Impacto

Un cliente MCP, o un LLM que haya sido manipulado mediante inyección de prompt para invocar la herramienta, puede leer cualquier archivo al que tenga acceso el proceso servidor. Entre los recursos expuestos se incluyen:

  • Claves SSH privadas
  • Credenciales de servicios en la nube
  • Archivos .env con variables de entorno sensibles
  • Código fuente de la aplicación
  • Cualquier otro archivo legible por el usuario bajo el que corre el servidor

El contenido leído es divulgado a través de la respuesta de la herramienta y enviado a los servidores de Google durante el ciclo de consulta a Gemini. Esta vulnerabilidad no permite ejecución de código por sí misma, pero la exfiltración de credenciales puede facilitar ataques posteriores de mayor gravedad.

Parche

El problema fue corregido en la versión 1.3.1. Los cambios introducidos son los siguientes:

  • _resolve_path ahora resuelve los enlaces simbólicos antes de evaluar la ruta.
  • La confinación de rutas se realiza mediante Path.relative_to(root), garantizando que la ruta resuelta pertenezca al directorio raíz autorizado.
  • El modo inline omite cualquier entrada cuya ruta resuelta quede fuera del directorio de trabajo, aplicando la misma protección que ya existía en el modo at_command.

Mitigaciones y soluciones alternativas

Se recomienda actualizar a la versión 1.3.1 de forma inmediata. Mientras no sea posible aplicar la actualización, se sugieren las siguientes medidas paliativas:

  • Evitar el uso de mode="inline" cuando la entrada del parámetro files provenga de fuentes no confiables.
  • Ejecutar el servidor bajo un usuario del sistema con permisos mínimos, limitando así el alcance de los archivos accesibles en caso de explotación.

Créditos

Vulnerabilidad reportada de forma privada por Zhihao Zhang (WPI).