
# Validatore di exploit BlueGate - Validatore RD Gateway per CVE-2020-0609 e CVE-2020-0610 (BlueGate) che utilizza OpenSSL DTLS su UDP/3391.
Una piccola utility Python solo di verifica per validare remotamente il comportamento delle patch associate alle vulnerabilità di Microsoft Remote Desktop Gateway:
Le vulnerabilità, comunemente associate alla ricerca BlueGate, interessano Microsoft Remote Desktop Gateway (RD Gateway) e possono potenzialmente consentire a un attaccante remoto non autenticato di eseguire codice arbitrario su un server non patchato.
Questa utility non implementa esecuzione remota di codice, denial of service, persistenza o consegna di payload.
Esegue una singola richiesta di validazione a livello di protocollo e valuta la risposta dell'RD Gateway.
| Proprietà | Dettagli |
|---|---|
| CVE | CVE-2020-0609, CVE-2020-0610 |
| Componente | Microsoft Remote Desktop Gateway |
| Tipo di Vulnerabilità | Esecuzione Remota di Codice |
| Autenticazione Richiesta | No |
| Interazione Utente | No |
| Vettore di Attacco | Rete |
| Gravità | Critica |
| CVSS v3.1 | 9.8 |
| Vettore CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Protocollo Principale | Trasporto UDP di RD Gateway |
| Porta UDP Predefinita | 3391/UDP |
| Nome Pubblico | BlueGate |
Le famiglie di Windows Server interessate includono:
Windows Server 2012
Windows Server 2012 R2
Windows Server 2016
Windows Server 2019
I sistemi che hanno installato gli aggiornamenti di sicurezza Microsoft di gennaio 2020 o gli aggiornamenti cumulativi successivi dovrebbero contenere le correzioni pertinenti.
Una distribuzione di RD Gateway può esporre più servizi correlati.
Per esempio:
Microsoft RD Gateway
|
+------------+------------+
| |
TCP/443 UDP/3391
| |
HTTPS / RDWeb RD Gateway UDP
RPC-over-HTTPS trasporto DTLS
Il portale RDWeb può essere visibile tramite un browser all'indirizzo:
https://gateway.example/RDWeb/
e la funzionalità di RD Gateway può anche essere esposta tramite TCP/443.
Tuttavia, la superficie di attacco testata da questo validatore in stile BlueGate è il trasporto UDP di RD Gateway, normalmente in ascolto su:
UDP/3391
Lo scanner utilizza quindi DTLS su UDP/3391, non HTTPS su TCP/443.
Modificare lo script per la porta 443 significherebbe testare:
UDP/443
che non è la stessa cosa di:
TCP/443
Prima di eseguire il validatore di vulnerabilità, UDP/3391 può essere verificato con Nmap:
nmap -Pn -sU -p3391 --reason <TARGET>
Esempio:
PORT STATE SERVICE
3391/udp open savant
L'etichetta del servizio savant è semplicemente la mappatura del nome della porta di Nmap e non identifica necessariamente il servizio effettivo.
Il servizio DTLS di RD Gateway può essere confermato in modo più affidabile con OpenSSL.
openssl s_client \
-dtls1 \
-connect <TARGET>:3391 \
-state
openssl s_client \
-dtls1_2 \
-connect <TARGET>:3391 \
-state
Un handshake riuscito conferma che un servizio DTLS sta rispondendo su UDP/3391.
L'output tipico di successo include:
SSL handshake has read ...
New, SSLv3, Cipher is ...
Protocol: DTLSv1
oppure:
Protocol: DTLSv1.2
Il validatore:
Non sono richieste credenziali di autenticazione per la validazione.
L'utility contiene intenzionalmente:
NESSUNA reverse shell
NESSUNA esecuzione di comandi
NESSUN payload di exploit
NESSUN ciclo di denial-of-service
NESSUNA trasmissione ripetuta di pacchetti malformati
Testato con:
Python 3
Client da riga di comando OpenSSL
Linux
Verifica OpenSSL:
openssl version
Verifica Python:
python3 --version
Non è richiesto alcun modulo OpenSSL di Python perché lo script avvia l'implementazione di sistema openssl s_client.
Questo evita i problemi di compatibilità incontrati dalle implementazioni BlueGate più vecchie che si affidavano ad API Python/OpenSSL deprecate come:
DTLSv1_client_method
Scansione di base:
python3 BlueGate.py <TARGET>
Esempio:
python3 BlueGate.py 192.0.2.10
La destinazione predefinita è:
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
Testare entrambi può essere utile:
python3 BlueGate.py --dtls 1 192.0.2.10
python3 BlueGate.py --dtls 1.2 192.0.2.10
Esempio di risultato da un RD Gateway patchato:
[*] 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
[+] FIRMA DI SISTEMA PATCHATO RICEVUTA
Il server ha restituito 0x8000ffff, che è
il valore di rifiuto utilizzato dal rilevatore
CVE pubblico per identificare un host patchato.
La stessa risposta di sistema patchato può anche essere restituita su DTLS 1.0:
Response length: 16
Response hex: 02000c0000000000ffffffffffff0080
Status: 0x8000ffff
0x8000ffffUna risposta che termina con:
0x8000ffff
è il valore di rifiuto utilizzato dagli scanner pubblici BlueGate/RD Gateway per identificare la condizione di frammentazione malformata come rifiutata.
Lo strumento pertanto segnala:
FIRMA DI SISTEMA PATCHATO RICEVUTA
Questo fornisce una forte evidenza a livello di protocollo che la particolare condizione testata per CVE-2020-0609/CVE-2020-0610 non è sfruttabile utilizzando la tecnica di rilevamento pubblico nota.
Se viene ricevuta una risposta di 16 byte da RD Gateway ma il DWORD finale è diverso da:
0x8000ffff
lo strumento segnala:
RILEVATORE POSITIVO
Questo dovrebbe essere trattato come:
Potenzialmente Vulnerabile
piuttosto che come prova immediata di esecuzione remota di codice riuscita.
Il risultato dovrebbe preferibilmente essere corroborato utilizzando:
Informazioni sulla build di Windows
Informazioni sui KB installati
Inventario delle patch Microsoft
Scansione delle vulnerabilità con credenziali
prima di segnalare la vulnerabilità come definitivamente sfruttabile.