
CVE-2024-1561 - Gradio Leitura Arbitrária de Arquivos
CVE-2024-1561 é uma vulnerabilidade de leitura arbitrária de arquivos que afeta o Gradio em versões anteriores a 4.13.0. O Gradio é um framework Python popular usado para criar rapidamente interfaces web para modelos de machine learning e aplicações de IA.
A vulnerabilidade existe porque o endpoint /component_server não restringe adequadamente quais métodos da classe interna Component podem ser invocados. Um atacante pode abusar desse comportamento para chamar métodos que nunca foram destinados à exposição via HTTP.
Um desses métodos, move_resource_to_block_cache, permite que um arquivo do sistema de arquivos local seja copiado para o diretório de cache temporário do Gradio. Uma vez copiado, o arquivo fica acessível através do endpoint /file, permitindo que um atacante recupere seu conteúdo.
Embora a vulnerabilidade não forneça diretamente execução remota de código, ela pode expor arquivos sensíveis do servidor e pode ser usada para coletar credenciais, arquivos de configuração, chaves de API, tokens ou outras informações úteis para ataques adicionais.
As versões 4.13.0 ou posteriores contêm as verificações de segurança necessárias para impedir a invocação arbitrária de métodos.
O problema decorre de validação insuficiente no endpoint /component_server.
Em vez de limitar as solicitações a uma lista segura de funções chamáveis, o Gradio permitia que atacantes especificassem nomes arbitrários de métodos pertencentes a uma instância de componente.
Como o método interno:
move_resource_to_block_cache()
aceita um caminho de sistema de arquivos como entrada, um atacante pode instruir a aplicação a colocar em cache qualquer arquivo legível no servidor.
Uma vez armazenado em cache, o arquivo é exposto por meio da funcionalidade normal de fornecimento de arquivos do Gradio.
Um ataque bem-sucedido geralmente segue estas etapas:
/config./component_server.move_resource_to_block_cache./etc/passwd)./file.Esse processo permite que arquivos arbitrários legíveis pelo processo do Gradio sejam recuperados remotamente.
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"
}
Se for bem-sucedida, o Gradio retorna o local do arquivo armazenado em cache.
O atacante pode então solicitar:
GET /file=/tmp/gradio/<cached-file>/passwd HTTP/1.1
Host: target
para recuperar o conteúdo.
A exploração bem-sucedida pode permitir que um atacante leia arquivos sensíveis, incluindo:
/etc/passwd.env)O impacto depende dos privilégios da aplicação Gradio.
Para remediar esta vulnerabilidade:
Este repositório é fornecido apenas para fins educacionais, pesquisa de segurança e testes de penetração autorizados. Sempre obtenha permissão explícita antes de testar sistemas que você não possui ou não está autorizado a avaliar.