
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 :
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.