
BlueGate Exploit validator - Validador do RD Gateway para CVE-2020-0609 e CVE-2020-0610 (BlueGate) usando OpenSSL DTLS sobre UDP/3391.
Um utilitário Python pequeno somente de verificação para validar remotamente o comportamento do patch associado às vulnerabilidades do Microsoft Remote Desktop Gateway:
As vulnerabilidades, comumente associadas à pesquisa BlueGate, afetam o Microsoft Remote Desktop Gateway (RD Gateway) e podem potencialmente permitir que um atacante remoto não autenticado execute código arbitrário em um servidor sem patch.
Este utilitário não implementa execução remota de código, negação de serviço, persistência ou entrega de payload.
Ele realiza uma única solicitação de validação em nível de protocolo e avalia a resposta do RD Gateway.
| Propriedade | Detalhes |
|---|
| CVEs | CVE-2020-0609, CVE-2020-0610 |
| Componente | Microsoft Remote Desktop Gateway |
| Tipo de Vulnerabilidade | Execução Remota de Código |
| Autenticação Necessária | Não |
| Interação do Usuário | Não |
| Vetor de Ataque | Rede |
| Severidade | Crítica |
| CVSS v3.1 | 9.8 |
| Vetor CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Protocolo Principal | Transporte UDP do RD Gateway |
| Porta UDP Padrão | 3391/UDP |
| Nome Público | BlueGate |
As famílias afetadas do Windows Server incluem:
Windows Server 2012
Windows Server 2012 R2
Windows Server 2016
Windows Server 2019
Sistemas que instalaram as atualizações de segurança de janeiro de 2020 da Microsoft ou atualizações cumulativas posteriores devem conter as correções relevantes.
Uma implantação do RD Gateway pode expor múltiplos serviços relacionados.
Por exemplo:
Microsoft RD Gateway
|
+------------+------------+
| |
TCP/443 UDP/3391
| |
HTTPS / RDWeb RD Gateway UDP
RPC-over-HTTPS transporte DTLS
O portal RDWeb pode ser visível através de um navegador em:
https://gateway.example/RDWeb/
e a funcionalidade do RD Gateway também pode ser exposta através de TCP/443.
No entanto, a superfície de ataque testada por este validador estilo BlueGate é o transporte UDP do RD Gateway, normalmente escutando em:
UDP/3391
O scanner, portanto, usa DTLS sobre UDP/3391, não HTTPS sobre TCP/443.
Alterar o script para a porta 443 significaria testar:
UDP/443
que não é a mesma coisa que:
TCP/443
Antes de executar o validador de vulnerabilidade, o UDP/3391 pode ser verificado com o Nmap:
nmap -Pn -sU -p3391 --reason <ALVO>
Exemplo:
PORT STATE SERVICE
3391/udp open savant
O rótulo de serviço savant é simplesmente o mapeamento de nome de porta do Nmap e não identifica necessariamente o serviço real.
O serviço DTLS do RD Gateway pode ser confirmado de forma mais confiável com o OpenSSL.
openssl s_client \
-dtls1 \
-connect <ALVO>:3391 \
-state
openssl s_client \
-dtls1_2 \
-connect <ALVO>:3391 \
-state
Um handshake bem-sucedido confirma que um serviço DTLS está respondendo em UDP/3391.
A saída típica de sucesso inclui:
SSL handshake has read ...
New, SSLv3, Cipher is ...
Protocol: DTLSv1
ou:
Protocol: DTLSv1.2
O validador:
Nenhuma credencial de autenticação é necessária para a validação.
O utilitário contém intencionalmente:
SEM shell reverso
SEM execução de comandos
SEM payload de exploit
SEM loop de negação de serviço
SEM transmissão repetida de pacotes malformados
Testado com:
Python 3
Cliente de linha de comando OpenSSL
Linux
Verifique o OpenSSL:
openssl version
Verifique o Python:
python3 --version
Nenhum módulo OpenSSL do Python é necessário porque o script executa a implementação do sistema openssl s_client.
Isso evita problemas de compatibilidade encontrados por implementações BlueGate mais antigas que dependiam de APIs Python/OpenSSL obsoletas, tais como:
DTLSv1_client_method
Verificação básica:
python3 BlueGate.py <ALVO>
Exemplo:
python3 BlueGate.py 192.0.2.10
O destino padrão é:
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
Testar ambos pode ser útil:
python3 BlueGate.py --dtls 1 192.0.2.10
python3 BlueGate.py --dtls 1.2 192.0.2.10
Exemplo de resultado de um RD Gateway com patch:
[*] 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.
A mesma resposta de patch também pode ser retornada via DTLS 1.0:
Response length: 16
Response hex: 02000c0000000000ffffffffffff0080
Status: 0x8000ffff
0x8000ffffUma resposta que termina com:
0x8000ffff
é o valor de rejeição usado pelos scanners públicos BlueGate/RD Gateway para identificar a condição de fragmentação malformada como rejeitada.
A ferramenta, portanto, reporta:
PATCHED SIGNATURE RECEIVED
Isso fornece forte evidência em nível de protocolo de que a condição específica testada para CVE-2020-0609/CVE-2020-0610 não é explorável usando a técnica de detecção pública conhecida.
Se uma resposta de 16 bytes do RD Gateway for recebida, mas o DWORD final for algo diferente de:
0x8000ffff
a ferramenta reporta:
DETECTOR POSITIVE
Isso deve ser tratado como:
Potencialmente Vulnerável
em vez de prova imediata de execução remota de código bem-sucedida.
O resultado deve preferencialmente ser corroborado usando:
Informações de build do Windows
Informações de KB instalado
Inventário de patches da Microsoft
Varredura de vulnerabilidade com credenciais
antes de reportar a vulnerabilidade como definitivamente explorável.
Se nenhuma resposta do aplicativo for recebida:
INCONCLUSIVE
A ferramenta deliberadamente não classifica um timeout como vulnerável.
Um timeout pode ser causado por:
Portanto:
Sem resposta != Vulnerável
A abordagem pública de detecção BlueGate/RDG usa um pacote de fragmentação do RD Gateway contendo uma contagem incomum de fragmentos.
Conceitualmente:
Conexão DTLS
|
v
+-----------------------+
| Parser UDP RD Gateway |
+-----------------------+
|
| pacote de validação de fragmentação
v
+-----------------------+
| Validação de fragmento|
+-----------------------+
|
+---- com patch ----> rejeição
| 0x8000ffff
|
+---- inesperado ----> requer investigação
O pacote de validação usado por este utilitário é enviado apenas uma vez.
Este projeto destina-se exclusivamente a:
Teste apenas sistemas para os quais você tenha autorização explícita.
O autor não assume responsabilidade por uso indevido, acesso não autorizado, interrupção de serviço, perda de dados ou outras consequências resultantes do uso ou modificação deste software.
A metodologia de detecção é baseada em pesquisas publicamente documentadas sobre as vulnerabilidades do Microsoft RD Gateway CVE-2020-0609 e CVE-2020-0610, incluindo o trabalho realizado pela comunidade de pesquisa de segurança BlueGate e RD Gateway.
Este projeto principalmente moderniza o fluxo de trabalho de validação usando a implementação DTLS do OpenSSL do sistema em vez dos internals DTLS obsoletos do pyOpenSSL.