
CVE-2024-1561 - Gradio Lectura Arbitraria de Archivos
CVE-2024-1561 es una vulnerabilidad de lectura arbitraria de archivos que afecta a Gradio en versiones anteriores a la 4.13.0. Gradio es un popular framework de Python utilizado para construir rápidamente interfaces web para modelos de aprendizaje automático y aplicaciones de IA.
La vulnerabilidad existe porque el endpoint /component_server no restringe adecuadamente qué métodos de la clase interna Component pueden ser invocados. Un atacante puede abusar de este comportamiento para llamar a métodos que nunca fueron diseñados para ser expuestos a través de HTTP.
Uno de estos métodos, move_resource_to_block_cache, permite copiar un archivo del sistema de archivos local al directorio de caché temporal de Gradio. Una vez copiado el archivo, se vuelve accesible a través del endpoint /file, permitiendo a un atacante recuperar su contenido.
Aunque la vulnerabilidad no proporciona directamente ejecución remota de código, puede exponer archivos sensibles del servidor y puede ser aprovechada para obtener credenciales, archivos de configuración, claves API, tokens u otra información útil para ataques posteriores.
Las versiones 4.13.0 y posteriores contienen las comprobaciones de seguridad necesarias para prevenir la invocación arbitraria de métodos.
El problema se origina por una validación insuficiente dentro del endpoint /component_server.
En lugar de limitar las solicitudes a una lista segura de funciones invocables, Gradio permitía a los atacantes especificar nombres de métodos arbitrarios pertenecientes a una instancia de componente.
Debido a que el método interno:
move_resource_to_block_cache()
acepta una ruta del sistema de archivos como entrada, un atacante puede indicar a la aplicación que almacene en caché cualquier archivo legible en el servidor.
Una vez en caché, el archivo se expone a través de la funcionalidad normal de servidor de archivos de Gradio.
Un ataque exitoso generalmente sigue estos pasos:
/config./component_server.move_resource_to_block_cache./etc/passwd)./file.Este proceso permite recuperar de forma remota cualquier archivo legible por el proceso de Gradio.
POST /component_server HTTP/1.1
Host: target
Content-Type: application/json
{
"component_id": "3",
"data": "/etc/passwd",
"fn_name": "move_resource_to_block_cache",
"session_hash": "aaaaaaaaaaa"
}
Si tiene éxito, Gradio devuelve la ubicación del archivo en caché.
El atacante puede entonces solicitar:
GET /file=/tmp/gradio/<cached-file>/passwd HTTP/1.1
Host: target
para recuperar el contenido.
Una explotación exitosa puede permitir a un atacante leer archivos sensibles, incluyendo:
/etc/passwd.env)El impacto depende de los privilegios de la aplicación Gradio.
Para remediar esta vulnerabilidad:
Este repositorio se proporciona únicamente con fines educativos, de investigación en seguridad y pruebas de penetración autorizadas. Obtenga siempre permiso explícito antes de probar sistemas que no posea o para los que no tenga autorización de evaluación.