
# 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.
Se non viene ricevuta alcuna risposta dall'applicazione:
INCONCLUSIVO
Lo strumento deliberatamente non classifica un timeout come vulnerabile.
Un timeout potrebbe essere causato da:
Pertanto:
Nessuna risposta != Vulnerabile
L'approccio di rilevamento pubblico BlueGate/RDG utilizza un pacchetto di frammentazione di RD Gateway contenente un conteggio di frammenti insolito.
Concettualmente:
Connessione DTLS
|
v
+-----------------------+
| Parser UDP RD Gateway |
+-----------------------+
|
| pacchetto di validazione frammentazione
v
+-----------------------+
| Validazione frammento |
+-----------------------+
|
+---- patchato ----> rifiuto
| 0x8000ffff
|
+---- inatteso --> richiede indagine
Il pacchetto di validazione utilizzato da questa utility viene inviato una sola volta.
Questo progetto è destinato esclusivamente a:
Testare solo sistemi per i quali si dispone di autorizzazione esplicita.
L'autore non si assume alcuna responsabilità per uso improprio, accesso non autorizzato, interruzione del servizio, perdita di dati o altre conseguenze derivanti dall'uso o dalla modifica di questo software.
La metodologia di rilevamento si basa su ricerche pubblicamente documentate sulle vulnerabilità di Microsoft RD Gateway CVE-2020-0609 e CVE-2020-0610, incluso il lavoro svolto dalla comunità di ricerca sulla sicurezza di BlueGate e RD Gateway.
Questo progetto modernizza principalmente il flusso di lavoro di validazione utilizzando l'implementazione DTLS OpenSSL di sistema piuttosto che gli internals DTLS deprecati di pyOpenSSL.