
BlueGate Exploit validator - Validateur de passerelle RD pour CVE-2020-0609 et CVE-2020-0610 (BlueGate) utilisant OpenSSL DTLS sur UDP/3391.
Un petit utilitaire Python de vérification uniquement permettant de valider à distance le comportement des correctifs associés aux vulnérabilités Microsoft Remote Desktop Gateway :
Ces vulnérabilités, communément associées aux recherches BlueGate, affectent Microsoft Remote Desktop Gateway (RD Gateway) et peuvent potentiellement permettre à un attaquant distant non authentifié d'exécuter du code arbitraire sur un serveur non corrigé.
Cet utilitaire n'implémente pas d'exécution de code à distance, de déni de service, de persistance ou de livraison de charge utile.
Il effectue une seule requête de validation au niveau du protocole et évalue la réponse du RD Gateway.
| Propriété | Détails |
|---|
| CVE | CVE-2020-0609, CVE-2020-0610 |
| Composant | Microsoft Remote Desktop Gateway |
| Type de vulnérabilité | Exécution de code à distance |
| Authentification requise | Non |
| Interaction utilisateur | Non |
| Vecteur d'attaque | Réseau |
| Sévérité | Critique |
| CVSS v3.1 | 9.8 |
| Vecteur CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Protocole principal | Transport UDP RD Gateway |
| Port UDP par défaut | 3391/UDP |
| Nom public | BlueGate |
Les familles de Windows Server concernées incluent :
Windows Server 2012
Windows Server 2012 R2
Windows Server 2016
Windows Server 2019
Les systèmes ayant installé les mises à jour de sécurité Microsoft de janvier 2020 ou les mises à jour cumulatives ultérieures devraient contenir les correctifs pertinents.
Un déploiement RD Gateway peut exposer plusieurs services associés.
Par exemple :
Microsoft RD Gateway
|
+------------+------------+
| |
TCP/443 UDP/3391
| |
HTTPS / RDWeb RD Gateway UDP
RPC-over-HTTPS transport DTLS
Le portail RDWeb peut être visible via un navigateur à l'adresse :
https://gateway.example/RDWeb/
et les fonctionnalités RD Gateway peuvent également être exposées via TCP/443.
Cependant, la surface d'attaque testée par ce validateur de type BlueGate est le transport UDP du RD Gateway, qui écoute normalement sur :
UDP/3391
Le scanner utilise donc DTLS sur UDP/3391, et non HTTPS sur TCP/443.
Modifier le script pour le port 443 reviendrait à tester :
UDP/443
ce qui n'est pas la même chose que :
TCP/443
Avant d'exécuter le validateur de vulnérabilités, UDP/3391 peut être vérifié avec Nmap :
nmap -Pn -sU -p3391 --reason <CIBLE>
Exemple :
PORT STATE SERVICE
3391/udp open savant
Le libellé de service savant n'est que la correspondance de nom de port de Nmap et n'identifie pas nécessairement le service réel.
Le service DTLS du RD Gateway peut être confirmé plus fiablement avec OpenSSL.
openssl s_client \
-dtls1 \
-connect <CIBLE>:3391 \
-state
openssl s_client \
-dtls1_2 \
-connect <CIBLE>:3391 \
-state
Une poignée de main réussie confirme qu'un service DTLS répond sur UDP/3391.
Une sortie typique de réussite inclut :
SSL handshake has read ...
New, SSLv3, Cipher is ...
Protocol: DTLSv1
ou :
Protocol: DTLSv1.2
Le validateur :
Aucun identifiant d'authentification n'est requis pour la validation.
L'utilitaire contient intentionnellement :
AUCUN reverse shell
AUCUNE exécution de commande
AUCUNE charge utile d'exploitation
AUCUNE boucle de déni de service
AUCUNE transmission répétée de paquets malformés
Testé avec :
Python 3
Client en ligne de commande OpenSSL
Linux
Vérifier OpenSSL :
openssl version
Vérifier Python :
python3 --version
Aucun module Python OpenSSL n'est requis car le script lance l'implémentation système openssl s_client.
Cela évite les problèmes de compatibilité rencontrés par les anciennes implémentations BlueGate qui reposaient sur des API Python/OpenSSL obsolètes telles que :
DTLSv1_client_method
Analyse de base :
python3 BlueGate.py <CIBLE>
Exemple :
python3 BlueGate.py 192.0.2.10
La destination par défaut est :
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
Tester les deux peut être utile :
python3 BlueGate.py --dtls 1 192.0.2.10
python3 BlueGate.py --dtls 1.2 192.0.2.10
Exemple de résultat d'un RD Gateway corrigé :
[*] Cible : 192.0.2.10:3391/udp
[*] Mode DTLS : 1.2
[*] Démarrage du client DTLS OpenSSL...
[+] Poignée de main DTLS terminée.
[*] Sonde (11 octets) : 0500070000004100010041
[*] Envoi d'un paquet de validation...
[*] Longueur de la réponse : 16
[*] Hex de la réponse : 02000c0000000000ffffffffffff0080
[*] Statut : 0x8000ffff
[+] SIGNATURE DE SYSTÈME CORRIGÉ REÇUE
Le serveur a renvoyé 0x8000ffff, qui est
la valeur de rejet utilisée par le détecteur
CVE public pour identifier un hôte corrigé.
La même réponse de système corrigé peut également être renvoyée via DTLS 1.0 :
Longueur de la réponse : 16
Hex de la réponse : 02000c0000000000ffffffffffff0080
Statut : 0x8000ffff
0x8000ffffUne réponse se terminant par :
0x8000ffff
est la valeur de rejet utilisée par les scanners publics BlueGate/RD Gateway pour identifier la condition de fragmentation malformée comme rejetée.
L'outil rapporte donc :
SIGNATURE DE SYSTÈME CORRIGÉ REÇUE
Cela fournit une preuve solide au niveau du protocole que la condition particulière testée pour CVE-2020-0609/CVE-2020-0610 n'est pas exploitable en utilisant la technique de détection publique connue.
Si une réponse RD Gateway de 16 octets est reçue mais que le DWORD final est autre chose que :
0x8000ffff
l'outil rapporte :
DÉTECTEUR POSITIF
Cela doit être traité comme :
Potentiellement vulnérable
plutôt que comme une preuve immédiate d'exécution de code à distance réussie.
Le résultat devrait de préférence être corroboré en utilisant :
Les informations de build Windows
Les informations sur les KB installés
L'inventaire des correctifs Microsoft
L'analyse de vulnérabilités avec identifiants
avant de signaler la vulnérabilité comme définitivement exploitable.
Si aucune réponse applicative n'est reçue :
NON CONCLUSIF
L'outil ne classe délibérément pas un délai d'attente comme vulnérable.
Un délai d'attente pourrait être causé par :
Par conséquent :
Aucune réponse != Vulnérable
L'approche de détection publique BlueGate/RDG utilise un paquet de fragmentation RD Gateway contenant un nombre de fragments inhabituel.
Conceptuellement :
Connexion DTLS
|
v
+-----------------------+
| Analyseur UDP RD Gateway |
+-----------------------+
|
| paquet de validation de fragmentation
v
+-----------------------+
| Validation des fragments |
+-----------------------+
|
+---- corrigé ------> rejet
| 0x8000ffff
|
+---- inattendu -----> nécessite une investigation
Le paquet de validation utilisé par cet utilitaire n'est envoyé qu'une seule fois.
Ce projet est destiné exclusivement à :
Ne testez que les systèmes pour lesquels vous disposez d'une autorisation explicite.
L'auteur décline toute responsabilité en cas d'utilisation abusive, d'accès non autorisé, d'interruption de service, de perte de données ou d'autres conséquences résultant de l'utilisation ou de la modification de ce logiciel.
La méthodologie de détection est basée sur des recherches publiquement documentées sur les vulnérabilités Microsoft RD Gateway CVE-2020-0609 et CVE-2020-0610, y compris les travaux réalisés par la communauté de recherche en sécurité BlueGate et RD Gateway.
Ce projet modernise principalement le flux de validation en utilisant l'implémentation DTLS OpenSSL du système plutôt que les internes DTLS obsolètes de pyOpenSSL.