
BlueGate Exploit-Validator – RD-Gateway-Validator für CVE-2020-0609 und CVE-2020-0610 (BlueGate) unter Verwendung von OpenSSL DTLS über UDP/3391.
Ein kleines nur-prüfendes Python-Dienstprogramm zur Remote-Validierung des Patch-Verhaltens im Zusammenhang mit den Microsoft Remote Desktop Gateway-Schwachstellen:
Die Schwachstellen, die allgemein mit der BlueGate-Forschung in Verbindung gebracht werden, betreffen Microsoft Remote Desktop Gateway (RD Gateway) und können es einem nicht authentifizierten Remote-Angreifer potenziell ermöglichen, beliebigen Code auf einem ungepatchten Server auszuführen.
Dieses Dienstprogramm implementiert keine Remote-Codeausführung, keinen Denial-of-Service, keine Persistenz und keine Payload-Zustellung.
Es führt eine einzelne Validierungsanfrage auf Protokollebene durch und wertet die RD-Gateway-Antwort aus.
| Eigenschaft | Details |
|---|
| CVEs | CVE-2020-0609, CVE-2020-0610 |
| Komponente | Microsoft Remote Desktop Gateway |
| Schwachstellentyp | Remote-Codeausführung |
| Authentifizierung erforderlich | Nein |
| Benutzerinteraktion | Nein |
| Angriffsvektor | Netzwerk |
| Schweregrad | Kritisch |
| CVSS v3.1 | 9.8 |
| CVSS-Vektor | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Primäres Protokoll | RD-Gateway-UDP-Transport |
| Standard-UDP-Port | 3391/UDP |
| Öffentlicher Name | BlueGate |
Betroffene Windows-Server-Familien umfassen:
Windows Server 2012
Windows Server 2012 R2
Windows Server 2016
Windows Server 2019
Systeme, die Microsofts Sicherheitsupdates vom Januar 2020 oder spätere kumulative Updates installiert haben, sollten die relevanten Korrekturen enthalten.
Eine RD-Gateway-Bereitstellung kann mehrere verwandte Dienste bereitstellen.
Zum Beispiel:
Microsoft RD Gateway
|
+------------+------------+
| |
TCP/443 UDP/3391
| |
HTTPS / RDWeb RD Gateway UDP
RPC-over-HTTPS DTLS-Transport
Das RDWeb-Portal kann über einen Browser sichtbar sein unter:
https://gateway.example/RDWeb/
und die RD-Gateway-Funktionalität kann auch über TCP/443 bereitgestellt werden.
Die Angriffsfläche, die von diesem BlueGate-Validator getestet wird, ist jedoch der RD-Gateway-UDP-Transport, der normalerweise auf folgendem Port lauscht:
UDP/3391
Der Scanner verwendet daher DTLS über UDP/3391, nicht HTTPS über TCP/443.
Das Skript auf Port 443 zu ändern würde bedeuten, Folgendes zu testen:
UDP/443
was nicht dasselbe ist wie:
TCP/443
Vor dem Ausführen des Schwachstellen-Validators kann UDP/3391 mit Nmap überprüft werden:
nmap -Pn -sU -p3391 --reason <ZIEL>
Beispiel:
PORT STATE SERVICE
3391/udp open savant
Die Dienstbezeichnung savant ist lediglich Nmaps Portnamen-Zuordnung und identifiziert nicht unbedingt den tatsächlichen Dienst.
Der RD-Gateway-DTLS-Dienst kann zuverlässiger mit OpenSSL bestätigt werden.
openssl s_client \
-dtls1 \
-connect <ZIEL>:3391 \
-state
openssl s_client \
-dtls1_2 \
-connect <ZIEL>:3391 \
-state
Ein erfolgreicher Handshake bestätigt, dass ein DTLS-Dienst auf UDP/3391 antwortet.
Typische erfolgreiche Ausgabe umfasst:
SSL handshake has read ...
New, SSLv3, Cipher is ...
Protocol: DTLSv1
oder:
Protocol: DTLSv1.2
Der Validator:
Für die Validierung sind keine Authentifizierungsdaten erforderlich.
Das Dienstprogramm enthält absichtlich:
KEINE Reverse-Shell
KEINE Befehlsausführung
KEIN Exploit-Payload
KEINE Denial-of-Service-Schleife
KEINE wiederholte Übertragung fehlerhafter Pakete
Getestet mit:
Python 3
OpenSSL-Befehlszeilenclient
Linux
OpenSSL überprüfen:
openssl version
Python überprüfen:
python3 --version
Kein Python-OpenSSL-Modul ist erforderlich, da das Skript die Systemimplementierung openssl s_client startet.
Dies vermeidet Kompatibilitätsprobleme, die bei älteren BlueGate-Implementierungen auftraten, die auf veralteten Python/OpenSSL-APIs wie:
DTLSv1_client_method
basierten.
Grundlegender Scan:
python3 BlueGate.py <ZIEL>
Beispiel:
python3 BlueGate.py 192.0.2.10
Das Standardziel ist:
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
Das Testen beider Varianten kann nützlich sein:
python3 BlueGate.py --dtls 1 192.0.2.10
python3 BlueGate.py --dtls 1.2 192.0.2.10
Beispielergebnis von einem gepatchten 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.
Dieselbe gepatchte Antwort kann auch über DTLS 1.0 zurückgegeben werden:
Response length: 16
Response hex: 02000c0000000000ffffffffffff0080
Status: 0x8000ffff
0x8000ffffEine Antwort, die mit:
0x8000ffff
endet, ist der Ablehnungswert, der von öffentlichen BlueGate/RD-Gateway-Scannern verwendet wird, um den Zustand der fehlerhaften Fragmentierung als abgelehnt zu identifizieren.
Das Tool meldet daher:
PATCHED SIGNATURE RECEIVED
Dies liefert starke protokollebene Belege dafür, dass die spezifische Bedingung, die für CVE-2020-0609/CVE-2020-0610 getestet wird, mit der bekannten öffentlichen Erkennungstechnik nicht ausnutzbar ist.
Wenn eine 16-Byte-RD-Gateway-Antwort empfangen wird, der endgültige DWORD jedoch etwas anderes als:
0x8000ffff
ist, meldet das Tool:
DETECTOR POSITIVE
Dies sollte behandelt werden als:
Potentiell verwundbar
und nicht als unmittelbarer Beweis für eine erfolgreiche Remote-Codeausführung.
Das Ergebnis sollte vorzugsweise bestätigt werden mit:
Windows-Build-Informationen
Installierte KB-Informationen
Microsoft-Patch-Inventar
Berechtigtes Schwachstellen-Scanning
bevor die Schwachstelle als definitiv ausnutzbar gemeldet wird.
Wenn keine Anwendungsantwort empfangen wird:
INCONCLUSIVE
Das Tool klassifiziert ein Timeout bewusst nicht als verwundbar.
Ein Timeout kann verursacht werden durch:
Daher:
Keine Antwort != Verwundbar
Der öffentliche BlueGate/RDG-Erkennungsansatz verwendet ein RD-Gateway-Fragmentierungspaket mit einer ungewöhnlichen Fragmentanzahl.
Konzeptionell:
DTLS-Verbindung
|
v
+-----------------------+
| RD Gateway UDP-Parser |
+-----------------------+
|
| Fragmentierungs-Validierungspaket
v
+-----------------------+
| Fragmentvalidierung |
+-----------------------+
|
+---- gepatcht ----> Ablehnung
| 0x8000ffff
|
+---- unerwartet --> erfordert Untersuchung
Das von diesem Dienstprogramm verwendete Validierungspaket wird nur einmal gesendet.
Dieses Projekt ist ausschließlich bestimmt für:
Testen Sie nur Systeme, für die Sie eine ausdrückliche Autorisierung haben.
Der Autor übernimmt keine Verantwortung für Missbrauch, unbefugten Zugriff, Dienstunterbrechung, Datenverlust oder andere Konsequenzen, die sich aus der Verwendung oder Modifikation dieser Software ergeben.
Die Erkennungsmethodik basiert auf öffentlich dokumentierter Forschung zu den Microsoft-RD-Gateway-Schwachstellen CVE-2020-0609 und CVE-2020-0610, einschließlich der Arbeit der BlueGate- und RD-Gateway-Sicherheitsforschungsgemeinschaft.
Dieses Projekt modernisiert in erster Linie den Validierungsablauf, indem es die System-OpenSSL-DTLS-Implementierung anstelle der veralteten pyOpenSSL-DTLS-Interna verwendet.