Quatre exploits publics du noyau Linux exposent les hôtes non corrigés à un accès root local
Asim Manizada publie 4 exploits du noyau Linux (DirtyAH6, TUNderflow, PPPoEject, DiagSpill) permettant une élévation locale vers root. Corrigez vite.
Texte généré par intelligence artificielle, publié sans relecture humaine. Transparence IA
Image d’illustration générée par IA
La disponibilité de codes d’exploitation fonctionnels renforce l’urgence
Le chercheur en sécurité Asim Manizada a publié le 18 septembre 2026 des détails techniques et des exploits fonctionnels visant quatre vulnérabilités du noyau Linux capables d’élever des privilèges locaux jusqu’à root.
Ces failles sont DirtyAH6 (CVE-2026-80844), TUNderflow (CVE-2026-81000), PPPoEject (CVE-2026-68121) et DiagSpill (CVE-2026-74469). Chacune touche une partie différente de la pile réseau du noyau, mais toutes quatre concernent une gestion non sûre de la mémoire dans du code hautement privilégié.
Manizada a signalé les vulnérabilités à l’équipe de sécurité du noyau Linux à la mi-juillet. Il a ensuite coordonné ses travaux avec les distributions Linux avant de publier les exploits, laissant aux mainteneurs le temps de diffuser les correctifs.
Aucune exploitation dans la nature n’a été signalée. Cependant, la publication du code offre aux attaquants une base pour adapter ces techniques aux noyaux de distribution non corrigés, en particulier sur les serveurs multiutilisateurs, les infrastructures partagées et les hôtes de conteneurs.
Les exploits publiés sont conçus pour des builds spécifiques du noyau et peuvent provoquer le plantage de leurs cibles. Ils s’apparentent davantage à des outils de recherche de type proof of concept qu’à des implants fiables, mais Manizada a réussi à exploiter les vulnérabilités sous-jacentes pour obtenir des shells root pendant ses tests.
Quatre failles, quatre sous-systèmes réseau
DirtyAH6 affecte l’implémentation de l’Authentication Header d’IPsec pour IPv6. Le code vulnérable réorganise les adresses d’un en-tête de routage IPv6 avant de calculer ou de valider l’Integrity Check Value.
Le problème vient du fait que ipv6_rearrange_rthdr() faisait confiance au champ segments_left de l’en-tête de routage sans vérifier qu’il correspondait au nombre d’adresses indiqué par hdrlen. Avec un paquet IPv6 brut HDRINCL, hdrlen peut indiquer une seule adresse tandis que segments_left contient une valeur bien plus élevée. La valeur 255 déplace un pointeur d’adresse interne de 4 064 octets vers l’arrière, ce qui crée un accès mémoire hors limites et peut provoquer une écriture.
TUNderflow se trouve dans le code réseau virtuel TUN/TAP. Dans tun_get_user(), le noyau utilisait tun->align à la fois comme espace libre en tête du socket-buffer et dans un calcul déterminant la quantité de données du paquet devant rester linéaire.
Open vSwitch peut transmettre depuis un autre port une demande d’espace libre en tête surdimensionnée. Si cette valeur dépasse la zone exploitable dans la tête d’un socket-buffer d’une page, SKB_MAX_HEAD(align) passe sous zéro. Une valeur intermédiaire négative peut ensuite être convertie avec dépassement lors de son affectation à un size_t non signé, permettant à tun_alloc_skb() de positionner skb->data en dehors de la mémoire tampon allouée.
TUNderflow affiche un score CVSS 3.1 de 7,8, avec le vecteur CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H.
PPPoEject affecte le protocole PPP over Ethernet. Dans pppoe_sendmsg(), le noyau enregistrait un pointeur vers un en-tête PPPoE, puis appelait dev_hard_header(). Les callbacks spécifiques aux périphériques peuvent agrandir ou réallouer la tête du socket-buffer, invalidant ainsi les pointeurs vers la mémoire d’origine.
Une séquence de déclenchement consiste à bloquer une opération d’envoi dans copy_from_user() pendant l’ajout du premier port non-Ethernet à un périphérique team vide. Un callback délégué de l’en-tête GRE peut alors déplacer la mémoire tampon. PPPoE écrit ensuite six octets via le pointeur obsolète dans une zone mémoire libérée, ce qui provoque une condition use-after-free.
PPPoEject est également notée 7,8 selon CVSS 3.1, avec CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H.
DiagSpill est une faille de débordement de compteur dans sctp_diag. La fonction sctp_assoc_add_peer() incrémente un transport_count de 16 bits pour chaque pair SCTP unique. L’ajout du 65 536e transport fait revenir le compteur à zéro.
Le code de diagnostic SCTP réserve alors une charge utile INET_DIAG_PEERS fondée sur cette valeur nulle, tout en copiant l’ensemble des structures de transport_addr_list. Il en résulte une écriture hors limites d’environ 8 Mio au-delà de la fin du socket-buffer. Le correctif refuse les nouveaux pairs uniques lorsque transport_count atteint U16_MAX.
DiagSpill obtient le score le plus élevé des quatre failles : 8,8, avec CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H.
Aucun score ni vecteur CVSS v3 n’est disponible pour DirtyAH6.
Exigences d’accès local et effets distants limités
DirtyAH6, TUNderflow et PPPoEject nécessitent généralement que les espaces de noms utilisateur non privilégiés soient activés. Cette fonctionnalité permet à un compte ordinaire d’acquérir des capacités semblables à celles de root au sein d’un espace de noms isolé, notamment les capacités nécessaires pour accéder à des chemins réseau normalement restreints.
Par conséquent, ces trois failles sont surtout pertinentes lorsque les utilisateurs locaux peuvent créer leurs propres espaces de noms. La désactivation de cette fonctionnalité peut supprimer le point d’entrée non privilégié attendu, mais elle ne protège pas les processus ou les conteneurs qui disposent déjà des capacités nécessaires à l’administration du réseau.
DiagSpill est différent. Manizada indique que cette faille ne nécessite ni espace de noms utilisateur ni privilèges particuliers. Le vecteur NVD lui attribue néanmoins PR:L, ce qui signifie que de faibles privilèges sont requis selon son modèle de notation. La raison de cette divergence reste inconnue.
L’impact distant est plus limité que le risque d’accès root local. DirtyAH6 peut faire planter un routeur ou une passerelle IPv6 qui achemine du trafic IPv6 et ajoute un Authentication Header IPsec en mode transport. Manizada n’a obtenu un accès root à distance qu’après avoir délibérément préparé la mémoire de la cible en laboratoire ; il estime que l’exploitation sans cette préparation est extrêmement difficile.
DiagSpill peut faire planter à distance un système lorsque les options SCTP concernées, désactivées par défaut, sont actives. Aucun moyen viable d’obtenir un accès root à distance n’a été identifié, même dans des conditions favorables de disposition mémoire.
Aucune voie d’exploitation directe à distance n’a été signalée pour TUNderflow ou PPPoEject. Une sortie de conteneur pourrait théoriquement être possible grâce à ces failles, mais aucune n’a été développée ni démontrée.
Les correctifs complets commencent avec des versions stables précises
Les mainteneurs du noyau Linux ont corrigé les quatre défauts. Les premières versions stables upstream signalées comme contenant l’ensemble des correctifs sont les suivantes :
- 5.10.270
- 5.15.221
- 6.1.188
- 6.6.157
- 6.12.109
- 6.18.50
- 7.2.4
Ces numéros ne doivent pas être comparés mécaniquement aux chaînes de version du noyau indiquées par Debian, Ubuntu, Red Hat, SUSE ou d’autres distributions. Les éditeurs rétroportent généralement les correctifs de sécurité tout en conservant des numéros de version de base plus anciens.
Les administrateurs doivent vérifier que le paquet du noyau de leur distribution inclut les correctifs des quatre CVE. Les plages exactes de versions vulnérables, les versions des paquets des distributions et les identifiants des avis de sécurité des éditeurs ne sont pas connus.
Aucune des quatre vulnérabilités ne figure, à ce jour, dans le catalogue CISA Known Exploited Vulnerabilities et aucune échéance de remédiation KEV ne lui est associée. Cela concorde avec l’absence d’attaques signalées, mais ne réduit pas l’exposition créée par la disponibilité publique du code d’exploitation.
Quels systèmes traiter en priorité
Le déploiement des correctifs doit commencer par les systèmes sur lesquels des utilisateurs non fiables peuvent exécuter du code local ou créer des espaces de noms. Les cibles prioritaires comprennent les plateformes d’hébergement partagé, les serveurs de recherche, les machines de développement, les hôtes de conteneurs et les autres environnements Linux multiutilisateurs.
L’exposition est également plus élevée lorsque les fonctionnalités réseau concernées sont activement utilisées, notamment Open vSwitch, TUN/TAP, PPPoE, IPsec AH6, SCTP, les périphériques team et la gestion déléguée des en-têtes GRE.
À titre de mesures temporaires de réduction des risques, les administrateurs peuvent désactiver les espaces de noms utilisateur non privilégiés et supprimer les fonctionnalités réseau inutilisées. La désactivation d’IPv6 AH6, de TUN/TAP, de PPPoE ou de SCTP peut rendre certains chemins vulnérables inaccessibles.
Ces mesures ne remplacent pas l’installation de noyaux corrigés. D’autres chemins d’exécution peuvent exister, et DiagSpill n’est pas neutralisée par la désactivation des espaces de noms utilisateur.
La surveillance doit porter sur la création inattendue d’espaces de noms, les nouvelles configurations TUN/TAP ou SCTP, les activités inhabituelles d’Open vSwitch et des périphériques team, les shells root inexpliqués et les plantages du noyau impliquant les sous-systèmes concernés. Comme les proofs of concept peuvent déstabiliser un hôte, les erreurs du noyau peuvent constituer un premier signe de test ou d’exploitation infructueuse.
La recherche assistée par IA a mis au jour des erreurs vieilles de plusieurs décennies
Manizada a utilisé une analyse personnalisée assistée par IA pour modéliser le comportement de la mémoire du noyau et raisonner sur la disposition des objets. Le correctif de DirtyAH6 comporte une attribution « Assisted-by » faisant référence à cet outil.
L’origine des erreurs de programmation sous-jacentes remonterait à une période comprise entre 10 et 21 ans. Elles comprennent un champ de paquet non contrôlé, un underflow d’entier suivi d’une conversion avec dépassement en valeur non signée, un pointeur obsolète conservé lors d’une réallocation de mémoire tampon et un débordement de compteur de 16 bits.
Manizada avait également révélé en juillet la vulnérabilité OVSwrap d’Open vSwitch. L’un des nouveaux exploits reprend une technique de Dirty Frag, une autre vulnérabilité root du noyau Linux révélée par un autre chercheur en mai.
La fiabilité des exploits publics reste aujourd’hui limitée. L’évolution la plus importante tient au fait que les attaquants peuvent désormais étudier des chaînes d’exploitation complètes visant quatre failles réseau privilégiées et les adapter aux noyaux de distributions largement déployées. Installer les correctifs permet de fermer cette opportunité de manière plus fiable qu’un simple cloisonnement fondé sur la configuration.
Sources
Cet article est une réécriture originale fondée sur les sources ci-dessous.
CVE traitées dans cet article
- CVE-2026-74469Élevée8.8In the Linux kernel, the following vulnerability has been resolved: sctp: prevent peer transport count overflow sctp_assoc_add_peer() increments the association's 16-bit transport_count for every new unique peer. Adding the 65,536th transport wraps the count to zero. SCTP sock_diag uses transport
- CVE-2026-68121Élevée7.8In the Linux kernel, the following vulnerability has been resolved: pppoe: reload header pointer after dev_hard_header() pppoe_sendmsg() saves a pointer to the PPPoE header before calling dev_hard_header(). Device header callbacks are allowed to reallocate the skb head, invalidating pointers into
- CVE-2026-81000Élevée7.8In the Linux kernel, the following vulnerability has been resolved: net: tun: bound receive headroom tun_get_user() uses tun->align both as skb headroom and when choosing how much packet data to keep linear. OVS can propagate an oversized headroom request from another port to TUN or TAP. When ali
- CVE-2026-80844In the Linux kernel, the following vulnerability has been resolved: xfrm: ah6: validate routing header segments_left AH6 rearranges routing-header addresses before computing or verifying the ICV. ipv6_rearrange_rthdr() assumes that segments_left is not larger than the number of addresses described
