Vulnérabilités 0-day dans plusieurs piles TCP/IP open-source.

Date de publication :

33 vulnérabilités 0-day ont été découvertes dans plusieurs implémentations open-source des piles TCP/IP. Elles affectent plusieurs protocoles dont DNS, IPv6, IPv4, TCP, ICMP, LLMNR et mDNS. Leur exploitation peut permettre des injections de code arbitraire, des dénis de service, des fuites d’informations ainsi qu’un empoisonnement du cache DNS. Ces vulnérabilités impactent plus de 150 fabricants et plusieurs millions de dispositifs. Les composants vulnérables sont très largement utilisés dans tous les secteurs professionnels. Il est également estimé que 20% des acteurs concernés font partie du domaine de la santé.

L’exploitation des vulnérabilités décrites ci-dessous est techniquement possible à distance et sans authentification préalable. Néanmoins, la mise en place de mécanismes de filtrage peut permettre de rendre ces failles plus complexes à exploiter, notamment lorsque l’attaquant potentiel ne peut pas initier l’exploitation hors du réseau interne.

Les implémentations des piles TCP/IP infectées sont les suivantes : 

uIP, PicoTCP, FNET, Nut/Net

uIP :

uIP (micro IP) est une implémentation open source de la pile TCP/IP pour les microcontrôleurs 8bit et 16bit.

CVE-2020-13984[Score CVSS v3 : 7.5] : La fonction utilisée pour traiter les en-têtes d'extension IPv6 et les options d'en-tête d'extension peut être mise dans un état de boucle infinie en raison d’une vérification incorrecte des longueurs d'en-tête/options.

CVE-2020-13985 [Score CVSS v3 : 7.5] : La fonction utilisée pour décapsuler les en-têtes d'extension RPL ne vérifie pas la conversion d'entiers malformés lors de l'analyse des valeurs fournies dans un en-tête, ce qui permet aux attaquants de corrompre la mémoire.

CVE-2020-13986 [Score CVSS v3 : 7.5] : La fonction utilisée pour décapsuler les en-têtes d'extension RPL ne vérifie pas la valeur de la longueur d'un en-tête d'extension RPL reçu, ce qui permet aux attaquants de la mettre dans une boucle infinie.

CVE-2020-13987 [Score CVSS v3 : 8.2] : La fonction qui analyse les paquets entrants de la couche transport (TCP/UDP) ne vérifie pas les champs de longueur des en-têtes des paquets par rapport aux données disponibles dans les paquets. Étant donné les longueurs arbitraires, une lecture de la mémoire hors limites peut être effectuée pendant le calcul de la somme de contrôle.

CVE-2020-13988 [Score CVSS v3  :7.5] : La fonction qui analyse l'option TCP MSS (taille maximale des données utiles contenue dans un paquet TCP avant la fragmentation) ne vérifie pas la validité du champ de longueur de cette option. Un attaquant peut potentiellement placer cette fonction dans une boucle infinie, lorsque des valeurs TCP MSS arbitraires sont fournies.

CVE-2020-17437 [Score CVSS v3 : 8.2] : Lors du traitement de données TCP urgente, il n'y a pas de contrôle de la valeur du pointeur de données urgente, ce qui peut permettre à un attaquant de corrompre la mémoire en fournissant des décalages arbitraires du pointeur de données Urgent dans les paquets TCP.

CVE-2020-17438 [Score CVSS v3 : 7.0] : Le code qui réassemble les paquets fragmentés ne valide pas la longueur totale d'un paquet entrant spécifiée dans son en-tête IP, ainsi que la valeur de décalage de fragmentation spécifiée dans l'en-tête IP. Cela peut entraîner une corruption de la mémoire.

CVE-2020-17439[Score CVSS v3 : 8.1] : Les réponses DNS entrantes sont analysées par le client DNS même s'il n'y a pas eu de requêtes sortantes. L’identifiant de la transaction DNS n'est pas également suffisamment aléatoire. À condition que le cache DNS soit assez petit (4 entrées), cela facilite les attaques d'empoisonnement du cache DNS.

CVE-2020-17440[Score CVSS v3 : 7.5] : Lors de l'analyse des paquets DNS entrants, il n'est pas vérifié si les noms de domaine sont nuls. Un attaquant peut potentiellement corrompre la mémoire avec des réponses DNS élaborées.

CVE-2020-24334[Score CVSS v3 : 8.2] : Le code qui traite les réponses DNS ne vérifie pas si le nombre de réponses spécifié dans l'en-tête du paquet DNS correspond aux données de réponse disponibles dans le paquet DNS. Un attaquant peut potentiellement corrompre la mémoire.

CVE-2020-24335[Score CVSS v3 : 7.5] : La fonction qui analyse les noms de domaine manque de contrôles de limites. Un attaquant peut potentiellement corrompre la mémoire avec des paquets DNS élaborés.

CVE-2020-24336 [Score CVSS v3 : 9.8] : Le code d'analyse des enregistrements DNS dans les paquets de réponse DNS envoyés via NAT64 ne valide pas le champ de longueur des enregistrements de réponse. Un attaquant peut potentiellement corrompre la mémoire avec des paquets DNS élaborés.

CVE-2020-25112[Score CVSS v3 : 8.1] : Plusieurs problèmes, tels que des vérifications insuffisantes de la longueur de l'en-tête IPv4/IPv6 et des vérifications incohérentes des longueurs d'extension de l'en-tête IPv6, permettent aux attaquants de corrompre la mémoire.

picoTCP :

picoTCP est une implémentation open source de la pile TCP/IP pour les systèmes embarqués et l’IoT.

CVE-2020-17441[Score CVSS v3 : 7.5] : Le champ de longueur de la charge utile des en-têtes d'extension IPv6 n'est pas vérifié par rapport aux données disponibles dans les paquets entrants. Un attaquant peut potentiellement corrompre la mémoire.

CVE-2020-17442[Score CVSS v3 : 7.5] : La fonction qui traite l'en-tête de l'extension Hop-by-Hop dans les paquets IPv6 et ses options n'a aucune vérification par rapport au champ de longueur de l'en-tête. Un attaquant peut potentiellement mettre la fonction dans une boucle infinie en fournissant des valeurs de longueur arbitraires.

CVE-2020-17443[Score CVSS v3 : 8.2] : Lors du traitement des demandes d'écho ICMPv6, il n'est pas vérifié si l'en-tête ICMPv6 est constitué d'au moins 8 octets (définition - RFC443). Un attaquant peut potentiellement corrompre la mémoire en faisant créer à la fonction des réponses d'écho ICMPv6 basées sur une demande reçue avec un en-tête plus petit.

CVE-2020-17444[Score CVSS v3 : 7.5] : La fonction qui traite les en-têtes IPv6 ne vérifie pas les longueurs des options des en-têtes d'extension. Un attaquant peut potentiellement mettre cette fonction dans une boucle infinie avec des valeurs de longueur élaborées.

CVE-2020-17445[Score CVSS v3 : 7.5] : La fonction qui traite l'en-tête d'extension des options de destination IPv6 ne vérifie pas la validité de la longueur de ses options. Un attaquant peut potentiellement corrompre et/ou de mettre la fonction dans une boucle infinie avec des valeurs de longueur élaborées.

FNET

FNET est une implémentation open source de la pile TCP/IP pour les microcontrôleurs 32bits.

CVE-2020-24337[Score CVSS v3 : 7.5] : La fonction qui traite les options TCP ne valide pas leurs longueurs. Un attaquant peut potentiellement mettre la fonction dans une boucle infinie avec des options TCP peu communes/non prises en charge avec des tailles spécifiques.

CVE-2020-24338[Score CVSS v3 : 9.8] : La fonction qui analyse les noms de domaine manque de contrôles de limites. Un attaquant peut potentiellement corrompre la mémoire avec des paquets DNS élaborés.

CVE-2020-24339[Score CVSS v3 : 7.5] : La fonction qui analyse les noms de domaine manque de contrôles de limites, ce qui peut permettre aux attaquants de corrompre la mémoire avec des paquets DNS élaborés.

CVE-2020-24340[Score CVSS v3 : 8.2] : Le code qui traite les réponses DNS ne vérifie pas si le nombre de réponses spécifié dans l'en-tête du paquet DNS correspond aux données de réponse disponibles dans le paquet DNS, ce qui permet aux attaquants d'effectuer une corruption de la mémoire.

CVE-2020-24341[Score CVSS v3 : 8.2] : La fonction de traitement des données d'entrée TCP ne valide pas la longueur des paquets TCP entrants, ce qui permet aux attaquants de lire en dehors des limites et d'effectuer une corruption de la mémoire.

CVE-2020-17467[Score CVSS v3 : 8.2] : Lors de l'analyse des demandes LLMNR, il n'est pas vérifié si les noms de domaine sont nuls. Cela peut permettre aux attaquants de lire en dehors des limites mémoires.

CVE-2020-17468[Score CVSS v3 : 7.5] : La fonction qui traite l'en-tête de l'extension Hop-by-Hop IPv6 ne vérifie pas la validité des longueurs de ses options, ce qui permet aux attaquants de corrompre la mémoire.

Nut/Net

Nut/Net est une implémentation open source de la pile TCP/IP pour les systèmes embarqués et l’IoT.

Le code qui traite les requêtes DNS présente plusieurs problèmes :

CVE-2020-25107, CVE-2020-25108 [Score CVSS v3 : 7.5] : Il n'est pas vérifié si un nom de domaine est terminé par NULL. Un attaquant peut potentiellement exploiter cette faille pour perpétuer une injection de code arbitraire.

CVE-2020-25109 [Score CVSS v3 : 8.2] : La longueur des données de réponse DNS n'est pas vérifiée (peut être fixée à une valeur arbitraire à partir d'un paquet).

CVE-2020-25110[Score CVSS v3 : 8.2] : Le nombre de requêtes/réponses DNS (fixé dans l'en-tête DNS) n'est pas vérifié par rapport aux données présentes.

CVE-2020-25111  [Score CVSS v3 : 9.8] : L'octet de longueur d'un nom de domaine dans une requête/réponse DNS n'est pas vérifié et est utilisé pour des opérations de mémoire interne.

 

Informations

La faille est activement exploitée :

Un correctif existe :

Une mesure de contournement existe :

Risques

Risques

  • Injection de code arbitraire
  • Déni de service
  • Fuite d’informations 
  • Empoisonnement du cache DNS

Criticité

  • Score CVSS v3 : 7.5 - 9.8

Existence d’un code d’exploitation

  • Une ébauche d'exploitation est disponible pour le CVE-2020-25111 dans le lien en référence de ce bulletin.
  • Pour les autres vulnérabilités, il n'existe pas de code d'exploitation disponible publiquement à l'heure actuelle.
  • Il est cependant important de noter que ces vulnérabilités couvrent des principes de bases de la pile TCP/IP. Elles sont assez relativement aisées à exploiter sur une infrastructure peu protégée.

Composants vulnérables

  • uIP
  • picoTCP
  • FNET
  • Net/Nut

CVE

CVE-2020-13984

CVE-2020-13985

CVE-2020-13986

CVE-2020-13987.

CVE-2020-13988

CVE-2020-17437

CVE-2020-17438

CVE-2020-17439

CVE-2020-17440

CVE-2020-24334

CVE-2020-24335

CVE-2020-24336

CVE-2020-25112

CVE-2020-17441

CVE-2020-17442

CVE-2020-17443

CVE-2020-17444

CVE-2020-17445

CVE-2020-24337

CVE-2020-24338

CVE-2020-24339

CVE-2020-24340

CVE-2020-24341

CVE-2020-17467 

CVE-2020-17468

CVE-2020-25107

CVE-2020-25108 

CVE-2020-25109

CVE-2020-25110

CVE-2020-25111 

 

Solutions ou recommandations

Mise en place de correctifs de sécurité

  • Aucun correctif de sécurité n’est disponible actuellement.

Solution de contournement

Bien qu’aucune solution ne permette de se protéger totalement de ces vulnérabilités dans l’immédiat, il est possible de diminuer les risques d’Amnesia:33.

  • Lorsque c’est possible, privilégier l'utilisation de serveurs DNS internes à l’entreprise.

  • Désactiver ou bloquer le trafic IPv6 via un mécanisme de filtrage.

  • Segmenter son réseau et appliquer des mécanismes de filtrage (Pare-Feu, ACL) ainsi que des mécanismes de surveillance réseau (IPS).