
BlueGate Exploit validator - مدقق بوابة RD للتحقق من CVE-2020-0609 وCVE-2020-0610 (BlueGate) باستخدام OpenSSL DTLS عبر UDP/3391.
أداة للتحقق فقط صغيرة بلغة Python للتحقق عن بُعد من سلوك التصحيح المرتبط بثغرات Microsoft Remote Desktop Gateway:
هذه الثغرات، المرتبطة عادةً بأبحاث BlueGate، تؤثر على Microsoft Remote Desktop Gateway (RD Gateway) ويمكن أن تسمح لمهاجم عن بُعد غير مصادق بتنفيذ تعليمات برمجية عشوائية على خادم غير مُصحح.
لا تقوم هذه الأداة بتنفيذ استغلال عن بُعد، أو رفض خدمة، أو استمرارية، أو تسليم حمولة.
تقوم بطلب تحقق واحد على مستوى البروتوكول وتقيّم استجابة RD Gateway.
| الخاصية | التفاصيل |
|---|
| CVEs | CVE-2020-0609, CVE-2020-0610 |
| المكوّن | Microsoft Remote Desktop Gateway |
| نوع الثغرة | تنفيذ تعليمات برمجية عن بُعد |
| المصادقة المطلوبة | لا |
| تفاعل المستخدم | لا |
| ناقل الهجوم | الشبكة |
| الخطورة | حرجة |
| CVSS v3.1 | 9.8 |
| ناقل CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| البروتوكول الأساسي | ناقل RD Gateway UDP |
| منفذ UDP الافتراضي | 3391/UDP |
| الاسم العام | BlueGate |
تشمل عائلات Windows Server المتأثرة:
Windows Server 2012
Windows Server 2012 R2
Windows Server 2016
Windows Server 2019
الأنظمة التي قامت بتثبيت تحديثات الأمان من Microsoft لشهر يناير 2020 أو التحديثات التراكمية اللاحقة يجب أن تحتوي على الإصلاحات ذات الصلة.
يمكن لنشر RD Gateway أن يعرض خدمات متعددة ذات صلة.
على سبيل المثال:
Microsoft RD Gateway
|
+------------+------------+
| |
TCP/443 UDP/3391
| |
HTTPS / RDWeb RD Gateway UDP
RPC-over-HTTPS DTLS transport
قد تكون بوابة RDWeb مرئية من خلال متصفح على:
https://gateway.example/RDWeb/
وقد تكون وظيفة RD Gateway معرّضة أيضاً من خلال TCP/443.
ومع ذلك، فإن سطح الهجوم الذي يتم اختباره بواسطة هذا المدقق بنمط BlueGate هو ناقل RD Gateway UDP، الذي يستمع عادةً على:
UDP/3391
لذلك يستخدم الماسح DTLS عبر UDP/3391، وليس HTTPS عبر TCP/443.
تغيير البرنامج النصي إلى المنفذ 443 سيعني اختبار:
UDP/443
وهو ليس نفس الشيء مثل:
TCP/443
قبل تشغيل مدقق الثغرات، يمكن فحص UDP/3391 باستخدام Nmap:
nmap -Pn -sU -p3391 --reason <TARGET>
مثال:
PORT STATE SERVICE
3391/udp open savant
تسمية الخدمة savant هي مجرد تعيين اسم المنفذ في Nmap ولا تحدد بالضرورة الخدمة الفعلية.
يمكن تأكيد خدمة RD Gateway DTLS بشكل أكثر موثوقية باستخدام OpenSSL.
openssl s_client \
-dtls1 \
-connect <TARGET>:3391 \
-state
openssl s_client \
-dtls1_2 \
-connect <TARGET>:3391 \
-state
المصافحة الناجحة تؤكد أن خدمة DTLS تستجيب على UDP/3391.
يتضمن الإخراج الناجح النموذجي:
SSL handshake has read ...
New, SSLv3, Cipher is ...
Protocol: DTLSv1
أو:
Protocol: DTLSv1.2
يقوم المدقق بما يلي:
لا تتطلب عملية التحقق أي بيانات اعتماد مصادقة.
تحتوي الأداة عمداً على:
NO reverse shell
NO command execution
NO exploit payload
NO denial-of-service loop
NO repeated malformed packet transmission
تم اختباره مع:
Python 3
OpenSSL command-line client
Linux
تحقق من OpenSSL:
openssl version
تحقق من Python:
python3 --version
لا حاجة لوحدة Python OpenSSL لأن البرنامج النصي يشغّل تطبيق openssl s_client الخاص بالنظام.
هذا يتجنب مشاكل التوافق التي واجهتها تطبيقات BlueGate الأقدم التي اعتمدت على واجهات برمجة Python/OpenSSL المهجورة مثل:
DTLSv1_client_method
فحص أساسي:
python3 BlueGate.py <TARGET>
مثال:
python3 BlueGate.py 192.0.2.10
الوجهة الافتراضية هي:
UDP/3391
python3 BlueGate.py \
-P 3391 \
192.0.2.10
python3 BlueGate.py \
--dtls 1 \
192.0.2.10
python3 BlueGate.py \
--dtls 1.2 \
192.0.2.10
يمكن أن يكون اختبار كليهما مفيداً:
python3 BlueGate.py --dtls 1 192.0.2.10
python3 BlueGate.py --dtls 1.2 192.0.2.10
مثال لنتيجة من RD Gateway مُصحح:
[*] Target: 192.0.2.10:3391/udp
[*] DTLS mode: 1.2
[*] Starting OpenSSL DTLS client...
[+] DTLS handshake completed.
[*] Probe (11 bytes): 0500070000004100010041
[*] Sending one validation packet...
[*] Response length: 16
[*] Response hex: 02000c0000000000ffffffffffff0080
[*] Status: 0x8000ffff
[+] PATCHED SIGNATURE RECEIVED
Server returned 0x8000ffff, which is
the rejection value used by the public
CVE detector to identify a patched host.
قد يتم إرجاع نفس الاستجابة المُصححة أيضاً عبر DTLS 1.0:
Response length: 16
Response hex: 02000c0000000000ffffffffffff0080
Status: 0x8000ffff
0x8000ffffالاستجابة التي تنتهي بـ:
0x8000ffff
هي قيمة الرفض المستخدمة من قبل ماسحات BlueGate/RD Gateway العامة لتحديد حالة التجزئة غير الصالحة على أنها مرفوضة.
لذلك تُبلغ الأداة عن:
PATCHED SIGNATURE RECEIVED
هذا يوفر دليلاً قوياً على مستوى البروتوكول أن الحالة المحددة التي تم اختبارها لـ CVE-2020-0609/CVE-2020-0610 غير قابلة للاستغلال باستخدام تقنية الكشف العامة المعروفة.
إذا تم استلام استجابة RD Gateway من 16 بايت ولكن DWORD النهائي هو شيء آخر غير:
0x8000ffff
تُبلغ الأداة عن:
DETECTOR POSITIVE
يجب التعامل مع هذا على أنه:
Potentially Vulnerable
بدلاً من دليل فوري على تنفيذ تعليمات برمجية عن بُعد ناجح.
يُفضَّل تأكيد النتيجة باستخدام:
Windows build information
Installed KB information
Microsoft patch inventory
Credentialed vulnerability scanning
قبل الإبلاغ عن الثغرة على أنها قابلة للاستغلال بشكل قاطع.
إذا لم يتم استلام أي استجابة من التطبيق:
INCONCLUSIVE
لا تصنّف الأداة عمداً انتهاء المهلة على أنها ثغرة.
يمكن أن يكون سبب انتهاء المهلة:
لذلك:
No response != Vulnerable
يستخدم نهج الكشف العام BlueGate/RDG حزمة تجزئة RD Gateway تحتوي على عدد غير عادي من الأجزاء.
من الناحية المفاهيمية:
DTLS connection
|
v
+-----------------------+
| RD Gateway UDP parser |
+-----------------------+
|
| fragmentation validation packet
v
+-----------------------+
| Fragment validation |
+-----------------------+
|
+---- patched ----> rejection
| 0x8000ffff
|
+---- unexpected --> requires investigation
يتم إرسال حزمة التحقق المستخدمة من قبل هذه الأداة مرة واحدة فقط.
هذا المشروع مخصص حصرياً لـ:
اختبر فقط الأنظمة التي لديك إذن صريح لها.
لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام، أو الوصول غير المصرح به، أو انقطاع الخدمة، أو فقدان البيانات، أو أي عواقب أخرى ناتجة عن استخدام أو تعديل هذا البرنامج.
تعتمد منهجية الكشف على أبحاث موثقة علناً حول ثغرات Microsoft RD Gateway CVE-2020-0609 و CVE-2020-0610، بما في ذلك العمل الذي قام به مجتمع أبحاث أمن BlueGate و RD Gateway.
يقوم هذا المشروع بشكل أساسي بتحديث سير عمل التحقق باستخدام تطبيق OpenSSL DTLS الخاص بالنظام بدلاً من دواخل pyOpenSSL DTLS المهجورة.