CVE-2020-1350 / SIGRed : tous les SI basés sur une architecture Windows concernés

La vulnérabilité CVE-2020-1350 affectant le service DNS de Windows fait le buzz depuis sa publication le 14 juillet dernier. Elle pourrait permettre à un attaquant de réaliser sans authentification préalable une exécution de code arbitraire à distance avec les privilèges système et obtient un score CVSS de 10/10. Mais tout le monde a-t-il bien compris les risques que représente cette vulnérabilité ? Le bulletin de sécurité de Microsoft1 et l’alerte du CERT-FR de l’ANSSI2 ont-ils été assez claires ?

Les serveurs DNS Windows exposés sur Internet courent effectivement un risque majeure puisqu’ils peuvent être attaqués directement.

D’après le moteur de recherche Shodan, 813 serveurs DNS Windows seraient exposés directement sur Internet en France en ce 19 juillet.

D’après mes recherches, sur ces 813 serveurs, 252 n’ont pas été patchés et sont donc vulnérables si la solution de contournement proposée par Microsoft3 n’a pas été mise en place. 221 serveurs sont dans des versions potentiellement vulnérables, ce qui nous donne 473 serveurs susceptibles d’être exploités sur le territoire national.

Le service DNS fait partie des services activés nativement sur les serveurs Windows ayant le rôle de contrôleur de domaine Active Directory. La grande majorité, pour ne pas dire la quasi totalité des systèmes d’information de santé (comme bien d’autres également) reposent sur une architecture Windows, pour faire court, nous sommes tous concernés. N’oublions pas que l’annuaire Active Directory est l’élément central de tout SI basé sur une architecture Windows. Sa compromission serait dramatique car la quasi totalité du SI pourrait être réduite à néant par un attaquant.

Si vous êtes tenté de vous dire : « mes contrôleurs de domaine ne sont pas exposés sur Internet, mon SI n’est pas impacté », détrompez-vous !

Reprenons brièvement les explications fournies par les chercheurs de la société Check Point4 qui sont à l’origine de cette découverte, en les croisant avec les informations fournies par Microsoft :

1. Systèmes affectés :

Tous les serveurs Windows pour lesquels le service DNS est activé, de la version Windows Server 2003 à Windows Server 2019, et même jusqu’à la dernière version Windows Server, version 2004 (Server Core installation) sont impactés. Il est à noter que Microsoft a publié des correctifs pour les versions Windows Server 20085 qui ne sont plus supportées (hors support étendu). En général, ce n’est pas bon signe… Ne cherchez pas de patch pour 2003, il n’y en a aucun, il ne faut peut être pas abuser non plus...


2. Risques :

Déni de service ou exécution de code arbitraire à distance avec les privilèges système.


3. La vulnérabilité :

Le DNS utilise le port 53 et les protocoles UDP et TCP. Les paquets d’une taille maximale de 512 octets (ou 4096 octets si le serveur supporte EDNS6) peuvent transiter via UDP, au-delà, c’est le protocole TCP qui est utilisé jusqu’à la limite de 65 535 octets.

Un enregistrement DNS7 de type SIG (comme signature), désormais remplacé par RRSIG, est utilisé lors de la mise en place du protocole DNSSEC8 permettant de garantir l’intégrité de l’enregistrement DNS et éviter le spoofing DNS9.

Le service DNS de Windows (en TCP) est donc capable de traiter des réponses DNS allant jusqu’à 16 bits / 65 535 octets. Pour vulgariser, en ajoutant un ou plusieurs chiffres dans un sous domaine, accompagné d’une réponse de type SIG ou RRSIG proche de la valeur maximale, il serait possible de dépasser les 65 535 octets et par conséquent créer un dépassement de la mémoire tampon (buffer overflow), permettant ainsi de réaliser un déni de service ou une exécution de code arbitraire à distance.


4. Scénario d’attaque probable pour un serveur DNS non exposé sur Internet :
  • Un attaquant envoi un courriel avec un lien malveillant vers la messagerie d’un utilisateur interne.
  • L’utilisateur clique sur le lien contenu dans le courriel.
  • Le poste client de l’utilisateur émet une requête DNS vers un contrôleur de domaine interne.
  • Le contrôleur de domaine émet une requête DNS à un serveur DNS sur Internet qui va lui fournir une réponse DNS de plus 65 535 octets.
  • Le contrôleur de domaine tente de transmettre cette réponse DNS au poste client, ce qui provoque le buffer overflow et permet l’exploitation de la vulnérabilité

=> Game Over10

Un POC fonctionnel permettant de réaliser un déni de service est déjà disponible publiquement.


5. Solutions :

Appliquer le correctif de sécurité publié la 14 juillet.

Pour contourner provisoirement cette vulnérabilité, Microsoft propose de ne plus résoudre les noms DNS lorsque la réponse DNS du serveur supérieur dans la hiérarchie dépasse 65 280 octets.
Pour cela, Microsoft suggère d’ajouter la clé de registre suivante et de redémarrer le service DNS :

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters" /v "TcpReceivePacketSize" /t REG_DWORD /d 0xFF00 /f
net stop DNS && net start DNS

Une exploitation de la vulnérabilité pourrait être détectée à l’aide d’une règle IDS Suricata, comme celle-ci :

alert tcp any any -> any any (msg:" Possible exploitation de SIGRed CVE-2020-1350 - RCE sur serveur DNS Windows et Contrôleur Active Directory"; content:"|ff|"; startswith; byte_test:1,>=,0xec,0,relative; content:"|00 00 18|"; distance:12; within:64; fast_pattern; content:"|c0|"; distance:2; within:1; content:"|00 18|"; distance:1; within:2; reference: url,https://research.checkpoint.com/2020/resolving-your-way-into-domain-admin:-exploiting-a-17-year-old-bug-in-windows-dns-servers/; reference: url,https://portal.msrc.microsoft.com/fr-fr/security-guidance/advisory/CVE-2020-1350; reference: url,https://support.microsoft.com/fr-fr/help/4569509/windows-dns-server-remote-code-execution-vulnerability; reference: url,https://www.cert.ssi.gouv.fr/alerte/CERTFR-2020-ALE-16/; reference:cve,2020-1350; metadata: created_at 2020_07_17, updated_at 2020_07_17; sid:2020071770; rev:1;)

ou encore, celle proposée ici : https://github.com/ptresearch/AttackDetection/blob/master/CVE-2020-1350/cve-2020-1350.rules

La recherche de serveurs non patchés dans votre SI peut se faire à l’aide du script Nmap proposé ici : https://github.com/pr4jwal/NSE-scripts/blob/master/cve-2020-1350.nse

Je n’ai plus qu’à vous souhaiter un bon et prompt patching !

1 https://portal.msrc.microsoft.com/fr-fr/security-guidance/advisory/CVE-2020-1350

2 https://www.cert.ssi.gouv.fr/alerte/CERTFR-2020-ALE-16/

3 https://support.microsoft.com/fr-fr/help/4569509/windows-dns-server-remote-code-execution-vulnerability

4 https://research.checkpoint.com/2020/resolving-your-way-into-domain-admin:-exploiting-a-17-year-old-bug-in-windows-dns-servers/

5 https://www.catalog.update.microsoft.com/Search.aspx?q=KB4565529

6 https://fr.wikipedia.org/wiki/EDNS

https://www.bortzmeyer.org/dns-size.html

7 https://fr.wikipedia.org/wiki/Liste_des_enregistrements_DNS

8 https://fr.wikipedia.org/wiki/Domain_Name_System_Security_Extensions

9 https://fr.wikipedia.org/wiki/Empoisonnement_du_cache_DNS

10 https://youtu.be/PUlMmhD5it8

Partager ce document sur les réseaux

?>