
BlueGate Exploit validator - Validador de RD Gateway para CVE-2020-0609 y CVE-2020-0610 (BlueGate) usando OpenSSL DTLS sobre UDP/3391.
Una pequeña utilidad Python solo de verificación para validar remotamente el comportamiento del parche asociado con las vulnerabilidades de Microsoft Remote Desktop Gateway:
Las vulnerabilidades, comúnmente asociadas con la investigación BlueGate, afectan a Microsoft Remote Desktop Gateway (RD Gateway) y potencialmente pueden permitir que un atacante remoto no autenticado ejecute código arbitrario en un servidor sin parchear.
Esta utilidad no implementa ejecución remota de código, denegación de servicio, persistencia ni entrega de payloads.
Realiza una única solicitud de validación a nivel de protocolo y evalúa la respuesta del RD Gateway.
| Propiedad | Detalles |
|---|
| CVEs | CVE-2020-0609, CVE-2020-0610 |
| Componente | Microsoft Remote Desktop Gateway |
| Tipo de Vulnerabilidad | Ejecución Remota de Código |
| Autenticación Requerida | No |
| Interacción del Usuario | No |
| Vector de Ataque | Red |
| Severidad | Crítica |
| CVSS v3.1 | 9.8 |
| Vector CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Protocolo Principal | Transporte UDP de RD Gateway |
| Puerto UDP Predeterminado | 3391/UDP |
| Nombre Público | BlueGate |
Las familias de Windows Server afectadas incluyen:
Windows Server 2012
Windows Server 2012 R2
Windows Server 2016
Windows Server 2019
Los sistemas que hayan instalado las actualizaciones de seguridad de Microsoft de enero de 2020 o las actualizaciones acumulativas posteriores deberían contener las correcciones relevantes.
Una implementación de RD Gateway puede exponer múltiples servicios relacionados.
Por ejemplo:
Microsoft RD Gateway
|
+------------+------------+
| |
TCP/443 UDP/3391
| |
HTTPS / RDWeb RD Gateway UDP
RPC-over-HTTPS transporte DTLS
El portal RDWeb puede ser visible a través de un navegador en:
https://gateway.example/RDWeb/
y la funcionalidad de RD Gateway también puede estar expuesta a través de TCP/443.
Sin embargo, la superficie de ataque probada por este validador estilo BlueGate es el transporte UDP de RD Gateway, que normalmente escucha en:
UDP/3391
El escáner utiliza por lo tanto DTLS sobre UDP/3391, no HTTPS sobre TCP/443.
Cambiar el script al puerto 443 significaría probar:
UDP/443
que no es lo mismo que:
TCP/443
Antes de ejecutar el validador de vulnerabilidades, UDP/3391 puede verificarse con Nmap:
nmap -Pn -sU -p3391 --reason <TARGET>
Ejemplo:
PORT STATE SERVICE
3391/udp open savant
La etiqueta de servicio savant es simplemente la asignación de nombre de puerto de Nmap y no necesariamente identifica el servicio real.
El servicio DTLS de RD Gateway puede confirmarse de manera más fiable con OpenSSL.
openssl s_client \
-dtls1 \
-connect <TARGET>:3391 \
-state
openssl s_client \
-dtls1_2 \
-connect <TARGET>:3391 \
-state
Un handshake exitoso confirma que un servicio DTLS está respondiendo en UDP/3391.
La salida exitosa típica incluye:
SSL handshake has read ...
New, SSLv3, Cipher is ...
Protocol: DTLSv1
o:
Protocol: DTLSv1.2
El validador:
No se requieren credenciales de autenticación para la validación.
La utilidad contiene intencionalmente:
SIN shell inversa
SIN ejecución de comandos
SIN payload de exploit
SIN bucle de denegación de servicio
SIN transmisión repetida de paquetes malformados
Probado con:
Python 3
Cliente de línea de comandos OpenSSL
Linux
Verificar OpenSSL:
openssl version
Verificar Python:
python3 --version
No se requiere módulo Python OpenSSL porque el script lanza la implementación del sistema openssl s_client.
Esto evita los problemas de compatibilidad encontrados por implementaciones BlueGate más antiguas que dependían de APIs Python/OpenSSL obsoletas como:
DTLSv1_client_method
Escaneo básico:
python3 BlueGate.py <TARGET>
Ejemplo:
python3 BlueGate.py 192.0.2.10
El destino predeterminado es:
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
Probar ambos puede ser útil:
python3 BlueGate.py --dtls 1 192.0.2.10
python3 BlueGate.py --dtls 1.2 192.0.2.10
Ejemplo de resultado de un RD Gateway parcheado:
[*] 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.
La misma respuesta de parche también puede devolverse a través de DTLS 1.0:
Response length: 16
Response hex: 02000c0000000000ffffffffffff0080
Status: 0x8000ffff
0x8000ffffUna respuesta que termina con:
0x8000ffff
es el valor de rechazo utilizado por los escáneres públicos BlueGate/RD Gateway para identificar la condición de fragmentación malformada como rechazada.
La herramienta por lo tanto informa:
PATCHED SIGNATURE RECEIVED
Esto proporciona una fuerte evidencia a nivel de protocolo de que la condición particular probada para CVE-2020-0609/CVE-2020-0610 no es explotable utilizando la técnica de detección pública conocida.
Si se recibe una respuesta de 16 bytes del RD Gateway pero el DWORD final es algo distinto de:
0x8000ffff
la herramienta informa:
DETECTOR POSITIVE
Esto debe tratarse como:
Potencialmente Vulnerable
en lugar de una prueba inmediata de ejecución remota de código exitosa.
El resultado debería preferiblemente corroborarse utilizando:
Información de compilación de Windows
Información de KB instalados
Inventario de parches de Microsoft
Escaneo de vulnerabilidades con credenciales
antes de informar la vulnerabilidad como definitivamente explotable.
Si no se recibe ninguna respuesta de la aplicación:
INCONCLUSIVE
La herramienta deliberadamente no clasifica un tiempo de espera agotado como vulnerable.
Un tiempo de espera agotado podría ser causado por:
Por lo tanto:
Sin respuesta != Vulnerable
El enfoque público de detección BlueGate/RDG utiliza un paquete de fragmentación de RD Gateway que contiene un recuento de fragmentos inusual.
Conceptualmente:
Conexión DTLS
|
v
+-----------------------+
| Analizador UDP RD Gateway |
+-----------------------+
|
| paquete de validación de fragmentación
v
+-----------------------+
| Validación de fragmentos |
+-----------------------+
|
+---- parcheado ----> rechazo
| 0x8000ffff
|
+---- inesperado --> requiere investigación
El paquete de validación utilizado por esta utilidad se envía solo una vez.
Este proyecto está destinado exclusivamente para:
Solo pruebe sistemas para los cuales tenga autorización explícita.
El autor no asume ninguna responsabilidad por uso indebido, acceso no autorizado, interrupción del servicio, pérdida de datos u otras consecuencias resultantes del uso o modificación de este software.
La metodología de detección se basa en investigación documentada públicamente sobre las vulnerabilidades de Microsoft RD Gateway CVE-2020-0609 y CVE-2020-0610, incluido el trabajo realizado por la comunidad de investigación de seguridad de BlueGate y RD Gateway.
Este proyecto principalmente moderniza el flujo de trabajo de validación al utilizar la implementación DTLS de OpenSSL del sistema en lugar de los internals DTLS obsoletos de pyOpenSSL.