Le 14 octobre dernier, Microsoft a livré des mises à jour corrigeant une série de vulnérabilités, dont les bogues réseau critiques CVE-2020-16898 et CVE-2020-16899. Connues sous le nom de « Bad Neighbor » ou « Ping of Death Redux », ces failles se cachent dans l'implémentation du réseau TCP/IP sous Windows qui gère le traitement des paquets ICMPv6 entrants dans certaines situations. Les failles référencées CVE-2020-16898 et CVE-2020-16899 sont toutes deux liées à la vulnérabilité Bad Neighbor. Néanmoins, la faille CVE-2020-16898 permet une exécution de code à distance, tandis que la faille CVE-2020-16899 favorise les conditions d'un déni de service (DoS). Cette dernière exige une attention particulière, car elle affecte même les récentes versions de Windows 10 et de Windows Server, très utilisées dans les entreprises et par les particuliers. De plus, de multiples exploits de preuve de concept (PoC) ciblant cette vulnérabilité ont été repérés sur Internet.

La vulnérabilité Bad Neighbor expliquée

L'avis de sécurité de Microsoft sur la vulnérabilité est plutôt simpliste : « La vulnérabilité d'exécution de code à distance existe quand la pile TCP/IP de Windows gère incorrectement les paquets de ICMPv6 Router Advertisement. Un attaquant qui exploiterait avec succès cette vulnérabilité pourrait exécuter du code sur le serveur ou le client cible ».

La faille Bad Neighbor résulte d'un débordement de mémoire tampon dû lui-même à la façon dont la pile TCP/IP est implementée dans Windows. Quand le protocole ICMPv6 est activé, l'implémentation ne gère pas correctement les paquets Router Advertisements (RA), également appelés Neighbor Discovery (ND), à condition que le serveur DNS récursif (RDNSS) soit également activé. En effet, quand ces deux conditions s'appliquent, les paquets ICMPv6 RA sont censés comporter cinq champs : type, longueur, réservé, durée de vie et adresses IPv6 RDNSS, la longueur du paquet étant une valeur impaire, comme le précise la RFC 8106.

La raison en est simple. La valeur de la longueur (qui doit être d'au moins 3) est comptée par incréments de 8 octets. Les quatre premiers champs occupent toujours 8 octets. Étant donné que le dernier champ (adresses IPv6 RDNSS) peut contenir une ou plusieurs adresses IPv6 de 16 octets chacune, la taille totale d'un seul paquet RA devrait être de 24, 40, 56... (en fonction du nombre d'adresses IPv6).

Une structure de paquets ICMPv6 avec l'option RDNSS activée. (Crédit : Internet Engineering Task Force)

Une longueur de 3 impliquerait que la longueur totale du paquet est de 24 octets et contient une seule adresse IPv6. Par conséquent, la valeur fournie pour la longueur devrait être 3, 5, 7 et ainsi de suite. Si un paquet malveillant contient une valeur de longueur égale, il peut provoquer un dépassement de tampon du fait que le paquet est plus grand tout en prétendant contenir moins d'octets qu'il n'en contient réellement. Le débordement de tampon qui en résulte est destiné à provoquer une condition de déni de service, mais dans certaines conditions, un attaquant distant non authentifié peut exploiter la faille pour exécuter également du code arbitraire sur le système touché. « Pour exploiter cette vulnérabilité, un attaquant devrait envoyer des paquets RA ICMPv6 spécifiquement conçus à un ordinateur Windows distant », indique Microsoft dans l'avis de sécurité CVE-2020-16898.

Impact potentiel de Bad Neighbor

Windows et Windows Server restent les systèmes d'exploitation les plus utilisés dans les environnements d'entreprise, y compris dans le secteur de la santé. Les opérateurs de ransomware ciblent les hôpitaux et les établissements de santé en utilisant divers vecteurs d'attaque. Une attaque par ransomware a même provoqué, une fois, la mort d'un patient. Étant donné la probabilité que cette faille soit utilisée pour cibler les hôpitaux, le Service national de santé britannique (NHS) a publié son propre avis de sécurité sur Bad Neighbor. « Bad Neighbor est l'une de ces vulnérabilités qu’un utilisateur pourrait facilement négliger, car elle ne se manifeste actuellement que par un écran bleu de la mort », explique Rob Bathurst, directeur technique de Digitalware. Or, selon M. Bathurst, les opérateurs de rançon peuvent utiliser cette vulnérabilité comme vecteur d'attaque pour livrer leurs kits malveillants et accélérer leurs activités sur un réseau compromis ».

Cet avis ne tient cependant pas compte du fait que la seule façon de se protéger est de désactiver l'IPv6, ce qui est quasiment impossible sur un ordinateur moderne ou relié à un domaine. Donc, à partir du moment où la vulnérabilité est armée, les pirates peuvent l'utiliser contre toute personne ayant un système d'exploitation affecté qu'elle peut atteindre via un réseau. Une version armée de la vulnérabilité qui serait capable d'installer un kit de ransomware pourrait sérieusement augmenter la vitesse de propagation après la compromission initiale ». De multiples exploits PoC ciblant la vulnérabilité Bad Neighbor circulent aujourd’hui. C'est la raison pour laquelle il est fortement recommandé aux administrateurs réseau de corriger cette faille immédiatement.

Atténuer la faille Bad Neighbor

L'avis de Microsoft recommande de corriger la vulnérabilité Bad Neighbor en appliquant les dernières mises à jour de sécurité. Si la mise à jour n'est pas possible, une solution de contournement a également été prévue pour les systèmes fonctionnant sous Windows 10 version 1709 et ultérieure. Cette solution consiste à désactiver l'option ICMPv6 RDNSS en exécutant la simple commande PowerShell netsh int ipv6 set int *INTERFACENUMBER* rabaseddnsconfig=disable. Un redémarrage du système n'est pas nécessaire pour que les changements prennent effet. « Le contournement désactive la configuration DNS basée sur RA. Il offre une alternative aux réseaux dans lesquels l'adresse d'un hôte IPv6 est auto-configurée via l'auto-configuration des adresses IPv6 sans état, en cas d’absence totale d'infrastructure DHCPv6 ou quand certains hôtes n'ont pas de client DHCPv6 », indique l'avis de Microsoft. « Windows supporte toujours le DHCPv6 et il a la priorité sur la configuration basée sur 6106 ».

Cependant, il est conseillé de demander l’avis des administrateurs IT et réseau avant d'appliquer ces solutions de contournement afin de vous assurer que l'infrastructure de l'entreprise ne repose pas sur une configuration DNS basée sur RA. Pour les professionnels du SOC, la règle IDS Suricata suivante - alert icmp any any -> any any (msg : "Potential CVE-2020-16898 Exploit" ; lua:cve-2020-16898.lua ; sid:202016898 ; rev:1 ;) - peut permettre de surveiller le trafic pour détecter la présence d’un exploit Bad Neighbor. Le script cve-2020-16898.lua avec les informations correspondantes est disponible sur GitHub auprès de l'équipe de recherche sur les menaces avancée Advanced Threat Research de McAfee. Ce qui rend la remédiation particulièrement difficile dans le cas de Bad Neighbor, c’est que l’adoption de l’IPv6 reste soutenue et que le compromis pourrait résulter de la désactivation de la fonction RDNSS de l’ICMPv6.