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, ...)conmode="inline" - Función de lectura:
_read_file_for_inlineinvocada desde_prepare_inline_payloadensrc/mcp_server.py - El modo
at_commandya 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
.envcon 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_pathahora 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ámetrofilesprovenga 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).
