Cyberattaques alimentées par l'IA : Comment détecter, prévenir et se défendre contre les menaces intelligentes

Lire la suite
Nous utilisons l'intelligence artificielle pour les traductions de sites et, bien que nous nous efforcions d'être précis, il se peut que les traductions ne soient pas toujours exactes à 100 %. Nous vous remercions de votre compréhension.

Analyse détaillée de CVE-2024-38063 : Une menace critique dans la pile TCP/IP de Windows

par OPSWAT
Partager cet article
Photo du participant au programme de bourses OPSWAT , Pham Ngoc Thien

Le 13 août 2024, le MSTC (Microsoft Security Response Center) a révélé CVE-2024-38063, une vulnérabilité critique dans la pile TCP/IP de Windows qui peut être exploitée pour mettre en péril des fonctions réseau vitales au sein du système d'exploitation. Les participants au programme de bourses d'études supérieures OPSWAT présentent ici un examen approfondi des détails techniques et de l'impact potentiel de cette faille, ainsi que des stratégies d'atténuation recommandées pour cette vulnérabilité.

Participants au programme de bourses OPSWAT : Pham Ngoc Thien - Université des technologies de l'information de Ho Chi Minh 

Vue d'ensemble

CVE-2024-38063 est une vulnérabilité critique de la pile TCP/IP de Windows avec un score CVSS de 9.8, affectant le traitement des paquets IPv6. Des attaquants distants peuvent exploiter cette vulnérabilité en utilisant un débordement d'entier lors du traitement des en-têtes d'extension IPv6, afin d'exécuter du code malveillant ou de provoquer un déni de service.

Étant donné qu'IPv6 est activé par défaut sur la plupart des systèmes modernes, cette faille de type "zero-click" représente un risque substantiel. Par conséquent, toutes les versions non corrigées de Windows 10, Windows 11 et Windows Server 2008, 2012, 2016, 2019 et 2022 avec IPv6 activé sont vulnérables à cette CVE.

Diagramme montrant l'impact de CVE-2024-38063 sur les fonctions réseau de Windows

Concepts clés

Pile TCP/IP Windows

La pile TCP/IP de Windows est un composant fondamental du système d'exploitation responsable de la communication réseau via la suite TCP/IP (Transmission Control Protocol/Internet Protocol). Elle gère toutes les interactions réseau, facilitant la communication entre les appareils sur les réseaux locaux et mondiaux.

Capture d'écran de l'architecture de la pile TCP/IP de Windows

IPv6 et les en-têtes d'extension

L'IPv6 a été développé pour répondre aux limites de l'IPv4. Il a introduit diverses améliorations, telles que la modularité et la flexibilité, par le biais d'en-têtes d'extension. Ces en-têtes, placés entre l'en-tête IPv6 et la charge utile, prennent en charge des données optionnelles et des fonctions avancées.

Les principaux en-têtes d'extension IPv6 sont les suivants

  • Options de saut (Next Header = 0) 
  • En-tête d'acheminement (Next Header = 43) 
  • En-tête de fragment (En-tête suivant = 44) 
  • En-tête des options de destination (Next Header = 60) 
  • En-tête d'authentification (AH) (En-tête suivant = 51) 
  • Encapsulation de la charge utile de sécurité (ESP) (Next Header = 50) 

Chaque en-tête d'extension pointe vers le suivant via le champ Next Header, créant ainsi une chaîne séquentielle. Cette modularité introduit une complexité dans le processus de traitement des paquets et des vecteurs d'exploitation potentiels.

Diagramme décrivant les en-têtes d'extension IPv6 et la structure des paquets
Format d'un datagramme IPv6

Sous-débit d'un nombre entier

Un sous-écoulement d'entier se produit lorsqu'un calcul produit une valeur plus petite que la valeur minimale représentable pour un type de données. Par exemple, la soustraction d'une valeur plus grande d'une valeur plus petite à un entier non signé peut faire en sorte que le résultat devienne une très grande valeur positive.

Un débordement d'entier se produit lorsque la valeur dépasse la limite maximale du type de données et "déborde" vers la valeur minimale représentable (par exemple, 0 dans une plage de 0 à 10). Les deux scénarios sont dus à une mauvaise gestion des conditions limites dans les opérations arithmétiques, ce qui entraîne de graves vulnérabilités dans les systèmes logiciels.

Diagramme expliquant le débordement et le sous-écoulement des nombres entiers dans le traitement des données

Analyse de la vulnérabilité

Le déroulement du traitement de l'IPv6

Après avoir reçu un paquet IPv6, Windows analyse d'abord l'en-tête IPv6. Ensuite, la fonction IppReceiveHeaderBatch vérifie la valeur du champ Next Header afin de choisir le gestionnaire approprié pour les en-têtes suivants. Pour chaque en-tête d'extension de la chaîne, IppReceiveHeaderBatch invoque la routine correspondante pour traiter cet en-tête spécifique.

Diagramme décrivant le processus de traitement des paquets IPv6 dans Windows

Malgré la conception flexible et modulaire de ce mécanisme, il introduit un vecteur d'attaque potentiel. Dans le protocole IPv6, les paquets fragmentés sont généralement réassemblés à leur destination, où il existe une vulnérabilité dans le processus de réassemblage des fragments et le traitement des en-têtes.

Un attaquant peut induire une mauvaise gestion de la mémoire et déclencher un dépassement de tampon en envoyant de nombreux paquets malformés avec des en-têtes d'extension manipulés. Cela permet à l'excès de données d'écraser des régions de mémoire non voulues, ce qui permet potentiellement l'exécution de code arbitraire. Cette vulnérabilité est identifiée comme CVE-2024-38063.

Diagramme illustrant le risque de débordement de mémoire tampon à partir de paquets IPv6 malformés

Faille critique dans la pile TCP/IP de Windows

Le correctif de Microsoft visant à remédier à la vulnérabilité CVE-2024-38063 a été examiné en profondeur par le chercheur en sécurité Marcus Hutchins. Son blog technique offre un aperçu détaillé de la cause première de cette vulnérabilité. Sur la base de ses conclusions, notre collègue a approfondi la question afin de mieux comprendre l'exploit.

Analyse des correctifs

Le correctif comprenait une mise à jour du fichier tcpip.sys, y compris une modification de la fonction Ipv6pProcessOptions. Une modification d'une seule ligne a remplacé un appel de IppSendErrorList() par un appel à IppSendError(), indiquant que IppSendErrorList() peut avoir contribué au CVE.

Capture d'écran du code montrant tcpip.sys avant le correctif pour CVE-2024-38063
Figure 1. Avant le correctif
Capture d'écran du code montrant tcpip.sys après le correctif pour CVE-2024-38063
Figure 2. Après le patch

Taille de paquet nulle

Un examen plus approfondi de la fonction IppSendErrorList() a révélé qu'elle traite une liste chaînée de paquets en invoquant la fonction IppSendError() pour chacun d'entre eux. La fonction IppSendError() attribue aux paquets défectueux le statut STATUS_DATA_NOT_ACCEPTED. Elle crée ensuite un message d'erreur ICMP contenant des informations sur le paquet problématique et le renvoie. Cependant, lorsque la fonction IppSendErrorList() est invoquée avec always_send_icmp = true sur plusieurs paquets, elle définit le champ packet_size à zéro pour chaque paquet.

Capture d'écran du code montrant la fonction IppSendErrorList fixant la taille du paquet à zéro

La fonction Ipv6pProcessOptions est conçue pour traiter les en-têtes d'extension contenant des champs de valeur d'option, y compris les en-têtes Hop-by-Hop Options et Destination Options. En définissant le type d'option à une valeur supérieure à 0x80, un attaquant peut déclencher une erreur spécifique dans le traitement de l'en-tête d'options, forçant l'option always_send_icmp à être définie à true et entraînant par conséquent la définition d'une taille de paquet égale à zéro.

Capture d'écran de code illustrant la manipulation du champ Next Header de l'IPv6 à des fins d'exploitation

Alors qu'un paquet de taille nulle est généralement rejeté, un attaquant peut manipuler le champ Next Header dans le paquet IPv6 d'origine. Cette manipulation permet aux attaquants de contrôler l'interprétation du paquet lors des étapes de traitement ultérieures, évitant ainsi un rejet immédiat et créant une opportunité d'exploitation. 

Diagramme illustrant le contrôle exercé par un attaquant sur le traitement des paquets IPv6

Sous-débit d'entier dans le traitement des fragments

En fixant le champ Next Header à 44, indiquant un Fragment Header, un paquet est traité par les routines de fragmentation ou de réassemblage d'IPv6. Lorsque le paquet atteint l'analyseur de fragments, Ipv6pReceiveFragment(), il spécifie que : 

  • La taille du paquet est nulle. 
  • L'en-tête du fragment indique qu'il reste des données à traiter. 

Dans la fonction Ipv6pReceiveFragment(), la taille d'allocation pour fragment_size est calculée en soustrayant 0x30 (longueur de l'en-tête du paquet) de la taille du paquet sans aucune validation. Si la taille du paquet est nulle, cette soustraction est insuffisante, ce qui donne une grande valeur de 16 bits (environ 0xFFD0 ou 65488), entraînant le traitement par l'analyseur d'une mémoire excessive en dehors des limites valides du paquet et conduisant à une corruption de la mémoire. 

Capture d'écran du code montrant un débordement d'entier dans le traitement des fragments IPv6
Figure 3 Sous-débit d'entiers dans le traitement des fragments

De la sous-couverture à la surcouverture et à l'inadéquation de l'allocation

La fonction Ipv6pReassemblyTimeout() est chargée de nettoyer les fragments IPv6 incomplets après un délai spécifié en utilisant l'arithmétique 16 bits pour déterminer la taille des tampons et les opérations de copie. En raison du sous-débit de l'étape précédente, où la longueur du paquet ou la taille du fragment devient 0xFFD0, un débordement se produit lors de l'allocation.  

Le calcul qui en résulte entraîne la remise à zéro du registre, ce qui conduit à l'allocation de seulement 48 octets de mémoire. Cependant, comme la quantité de données copiées (65 488 octets du réassemblage->payload) ne correspond pas à la mémoire allouée, un débordement de mémoire tampon contrôlable se produit dans le pool du noyau. 

Capture d'écran de code illustrant un débordement de mémoire tampon dû à une erreur d'allocation de mémoire

Cette divergence permet aux attaquants d'exécuter un code malveillant via un paquet spécialement conçu qui exploite la vulnérabilité dans le traitement IPv6.

CVE-2024-38963 Preuve de concept 

Pour tenter de reproduire la vulnérabilité CVE-2024-38963, nos collègues ont créé une série de paquets malformés destinés à exploiter la faille. Le processus qu'ils ont suivi est le suivant :

1. Fabrication de paquets IPv6 malformés

Insérer un en-tête d'extension des options de destination IPv6 (type 60) après l'en-tête IPv6 de base, puis intégrer une option non valide (par exemple, le type d'option 0x81). 

Cette manipulation force le noyau Windows (tcpip.sys) à définir always_send_icmp = true, ce qui déclenche la génération d'erreurs ICMPv6 via la routine IppSendErrorList().

2. Forçage du traitement de la liste tampon nette (LBN)

L'inondation de la cible avec des rafales rapides de ces paquets malformés a augmenté les chances du noyau de regrouper plusieurs paquets dans une seule liste de tampons (Net-Buffer List - NBL). Lorsque deux paquets ou plus sont regroupés, la boucle vulnérable IppSendErrorList() est activée, réinitialisant de manière incorrecte les métadonnées DataLength et Offset dans les fragments suivants (la taille du paquet est désormais nulle). 

3. Injection de paquets IPv6 fragmentés

Suite à la transmission de paquets malformés, des paquets IPv6 fragmentés comprenant des en-têtes d'extension Fragment sont envoyés. Ces fragments sont traités en utilisant les valeurs DataLength déjà corrompues. 

4. Exploitation du délai de réassemblage

Le noyau conserve les fragments pendant 60 secondes (géré par Ipv6pReassemblyTimeout) pour permettre le réassemblage des paquets. Pendant ce délai, les valeurs DataLength corrompues déclenchent un débordement d'entier dans Ipv6pReceiveFragment, ce qui entraîne une taille de fragment incorrectement calculée (excessivement grande).

5. Déclenchement du débordement de la mémoire tampon du tas

Le noyau alloue une mémoire tampon sur le tas en se basant sur les valeurs sous-jacentes. Deux calculs différents sont effectués au cours du processus de réassemblage : l'un détermine la taille de l'allocation de mémoire (qui, en raison d'un débordement de 16 bits, devient trop petite), et l'autre calcule la longueur de la copie en utilisant la grande valeur débordée.

Cette inadéquation entraîne une écriture hors limites, provoquant un débordement de tampon basé sur le tas qui peut être exploité pour déclencher un déni de service (DoS) ou une exécution de code à distance.

Diagramme décrivant l'exploitation de la preuve de concept pour CVE-2024-38063

Le code source utilisé pour reproduire ce CVE pour une attaque par déni de service :

Lorsque cette vulnérabilité est exploitée par un attaquant, le système de la victime peut se bloquer immédiatement, ce qui se traduit par un écran bleu de la mort : 

Capture d'écran de l'interface utilisateur montrant l'écran bleu de Windows après l'exploitation de la CVE-2024-38063

Remédiation

Négliger la mise à jour régulière de votre système d'exploitation expose votre appareil à des menaces de sécurité, notamment celles liées aux CVE (Common Vulnerabilities and Exposures). Pour atténuer ces risques, MetaDefender Endpoint™ offre une protection robuste en détectant la version de votre système d'exploitation et en recherchant les vulnérabilités, y compris les CVE connues, telles que CVE-2024-38063. 

MetaDefender Endpoint est conçu pour protéger les appareils situés à l'intérieur des réseaux IT/OT critiques contre les menaces liées aux périphériques et aux supports amovibles. Il s'assure que votre système d'exploitation et les applications installées sont à jour, signale toute version obsolète ou vulnérable et répertorie les applications présentant des vulnérabilités et des CVE connus, ainsi que les correctifs recommandés. Il contribue également à protéger les appareils contre les risques liés aux supports amovibles en bloquant l'accès aux lecteurs USB jusqu'à ce qu'ils soient analysés et jugés propres à l'aide de plusieurs moteurs anti-malware, tout en effectuant un Deep CDR™ sur plus de 180 types de fichiers.  

Contactez l'un de nos experts dès aujourd'hui pour découvrir comment MetaDefender Endpoint peut transformer votre posture de sécurité grâce à une intelligence de pointe. 

Restez à jour avec OPSWAT!

Inscrivez-vous dès aujourd'hui pour recevoir les dernières mises à jour de l'entreprise, de l'entreprise, des histoires, des informations sur les événements, et plus encore.