CVE-2025-39682 : utilisation après libération dans le sous-système kTLS du noyau Linux et élévation locale de privilèges
SCORE DE MENACE HERMES & ÉLÉVATION DE PRIVILÈGES EN ESPACE NOYAU
Cible :Sous-système réseau du noyau Linux — net/tls/ (Chemin de réception logicielle kTLS) Le standard CVSS v3.1 attribue à la CVE-2025-39682 la note de 7.8 (Élevée) en raison de la nécessité d'un accès local (AV:L). Cependant, le score Hermes Threat Score l'élève à 94 (CRITIQUE / Priorité KEV Tier-1) suite à la confirmation de son exploitation active en conditions réelles répertoriée par la CISA le 18 septembre 2026. Dans les environnements cloud, les nœuds Kubernetes partagés et les passerelles web d'entreprise, le kTLS est fréquemment activé pour décharger les opérations cryptographiques. Des attaquants chaînant une évasion de conteneur ou une faille web exploitent ce bogue pour obtenir des droits root de manière déterministe sur l'ensemble des distributions Linux.
CVE-2025-39682: Linux Kernel kTLS Receive Path Zero-Length Record Use-After-Free Privilege EscalationVULNÉRABILITÉ
Software platform affected by security vulnerabilities and agentic attack patterns.
🔍 Pourquoi cette relation ? (Preuves & Provenance)
“Confirmed security vulnerability in Linux Kernel Core documented in Hermes dossier.”
- [vulnerability_report]
- [government_confirmation]CISA verified active exploitation in the wild and mandated federal remediation deadline in KEV entry. — Source : Cybersecurity & Infrastructure Security Agency (CISA): CISA Adds CVE-2026-59822 to Known Exploited Vulnerabilities Catalog (Fiabilité : VERY_HIGH)
1. Contexte technique & surface d’attaque
Section intitulée « 1. Contexte technique & surface d’attaque »Le protocole kTLS s’initialise sur des sockets TCP classiques à l’aide de l’option TCP_ULP (Upper Layer Protocol) :
int sock = socket(AF_INET, SOCK_STREAM, 0);connect(sock, (struct sockaddr *)&cible, sizeof(cible));// Activation du protocole de couche supérieure kTLSsetsockopt(sock, SOL_TCP, TCP_ULP, "tls", sizeof("tls"));// Configuration des paramètres cryptographiques pour la réceptionsetsockopt(sock, SOL_TLS, TLS_RX, &crypto_info, sizeof(crypto_info));Une fois activé, l’ensemble du trafic chiffré entrant est déchiffré par le sous-système cryptographique du noyau, puis assemblé sous forme de tampons placés dans tls_sw_context_rx->rx_list.
| Paramètre | Détail technique | Impact opérationnel |
|---|---|---|
| Identifiant CVE | CVE-2025-39682 | Inscription catalogue CISA KEV du 18-09-2026 |
| Classe de vulnérabilité | Utilisation après libération (CWE-416) & condition anormale (CWE-754) | Élévation locale de privilèges (LPE) vers root |
| Composant affecté | net/tls/tls_sw.c (tls_sw_recvmsg) | Sous-système réseau kTLS du noyau Linux |
| Vecteurs de déclenchement | Appel non privilégié à recvmsg() sur une socket TCP kTLS locale | Shell local, conteneur ou RCE applicatif |
| Authentification requise | Faible (PR:L) / Utilisateur local non privilégié ou UID de conteneur | Aucun privilège ou capacité spéciale requise |
| Impact | Exécution de code en Ring 0 / Extraction globale des identifiants | Prise de contrôle totale de l’hôte |
| Versions vulnérables | 6.0 à 6.1.148, 6.2 à 6.6.102, 6.7 à 6.12.43, 6.13 à 6.16.3, 6.17-rc1..2 | Distributions Linux avec CONFIG_TLS actif |
| Version corrective | Noyaux de maintenance 6.1.149, 6.6.103, 6.12.44, 6.16.4, 6.17 | Rétroportages éditeurs (RHEL, Ubuntu, Debian) |
2. Décomposition technique & cause racine
Section intitulée « 2. Décomposition technique & cause racine »Le défaut réside au cœur de la boucle de traitement de tls_sw_recvmsg() qui parcourt la file de réception (ctx->rx_list) pour remplir le tampon de l’utilisateur.
La contrainte sémantique de recvmsg()
Section intitulée « La contrainte sémantique de recvmsg() »Selon la spécification de kTLS, un appel unique à recvmsg() doit impérativement retourner :
- Soit un ou plusieurs enregistrements consécutifs de type DATA (données applicatives).
- Soit un seul enregistrement de contrôle non-DATA (alertes TLS, renégociations de session ou signaux de battement de cœur).
En aucun cas des trames de contrôle et des trames applicatives ne doivent être mélangées ou traitées de façon désynchronisée lors d’un même appel.
La faille des enregistrements de longueur nulle dans tls_sw_recvmsg()
Section intitulée « La faille des enregistrements de longueur nulle dans tls_sw_recvmsg() »Lorsqu’un pair distant envoie un enregistrement déchiffré ne contenant aucun octet utile (par exemple une trame de données vide ou une alerte sans corps), le gestionnaire traite le paquet et place le sk_buff dans la liste rx_list :
/* Représentation simplifiée de la logique vulnérable dans net/tls/tls_sw.c */static int tls_sw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags, int *addr_len){ struct tls_context *tls_ctx = tls_get_ctx(sk); struct tls_sw_context_rx *ctx = tls_sw_ctx_rx(tls_ctx); struct sk_buff *skb; ... while (len && (skb = tls_wait_data(sk, flags, timeo, &err))) { /* * ANOMALIE : lorsque skb->len est nul, la vérification ne consomme pas * correctement l'état de l'enregistrement de contrôle. La boucle libère * le skb mais omet de réinitialiser le marqueur de type d'enregistrement. */ if (skb->len == 0) { tls_rx_rec_done(ctx); kfree_skb(skb); continue; /* La boucle se poursuit avec un état désynchronisé */ } ... err = process_rx_list(ctx, skb, &len); } return copied;}La libération du paquet via kfree_skb() sans mise à jour cohérente de la machine à états laisse des pointeurs obsolètes dans ctx->rx_list. Dès la trame suivante, le noyau référence une zone mémoire déjà restituée aux allocateurs kmalloc-512 ou skbuff_head_cache.
┌────────────────────────────────────────────────────────────────────────┐│ CHRONOLOGIE DE L'USE-AFTER-FREE DANS kTLS │├────────────────────────────────────────────────────────────────────────┤│ T0 : Envoi d'un enregistrement vide suivi d'une trame de contrôle ││ T1 : tls_sw_recvmsg() extrait le skb vide et le libère par kfree_skb ││ T2 : Les drapeaux d'état ne sont pas réinitialisés ; pointeur résiduel ││ T3 : L'attaquant vaporise le cache kmalloc avec un pseudo-skb contrôlé ││ T4 : tls_sw_recvmsg() déréférence le pointeur obsolète -> UAF NOYAU ││ T5 : Détournement de sk->sk_data_ready -> Exécution en Ring 0 (Root) │└────────────────────────────────────────────────────────────────────────┘3. Déroulement chronologique de l’exploitation
Section intitulée « 3. Déroulement chronologique de l’exploitation »Les groupes cybercriminels ont militarisé cette vulnérabilité pour transformer un accès initial restreint en compromission complète du serveur :
- Accès initial non privilégié : l’attaquant dispose d’un shell local restreint (usurpation d’identifiants SSH, évasion de conteneur ou faille RCE dans une application web).
- Création de la socket kTLS : le binaire d’exploitation ouvre une connexion TCP locale, active
TCP_ULPavec la valeur"tls"et configure les clés symétriques viasetsockopt(..., SOL_TLS, TLS_RX). - Transmission du flux piégé : l’attaquant envoie sur la socket une séquence spécifique : un enregistrement applicatif chiffré de taille zéro immédiatement suivi d’une trame de contrôle hors séquence.
- Déclenchement de la libération prématurée : un appel à
recvmsg()avec un tampon tronqué forcetls_sw_recvmsgà libérer lesk_buffviakfree_skb()tout en maintenant une référence active dans la liste de réception. - Vaporisation du tas noyau (slab spraying) : l’attaquant inonde le cache
kmalloc-1024à l’aide d’appelssendmsg()pour réallouer l’emplacement libéré avec des données contrôlées contenant des pointeurs de rappel forgés. - Élévation de privilèges : lors d’une opération ultérieure sur la socket, le noyau exécute le pointeur manipulé en Ring 0. Le code injecté exécute
commit_creds(prepare_kernel_cred(NULL))et octroie les identifiants UID 0 (root) au processus de l’attaquant.
4. Investigation forensique & télémétrie
Section intitulée « 4. Investigation forensique & télémétrie »Traces d’effondrement et paniques du noyau
Section intitulée « Traces d’effondrement et paniques du noyau »Les tentatives d’exploitation infructueuses ou instables laissent des signatures explicites dans le tampon circulaire du noyau (dmesg / /var/log/messages) :
- Fautes de protection générale : rechercher des plantages provenant du sous-système
net/tls/:BUG: unable to handle page fault for address: ffff888012345678#PF: supervisor read access in kernel mode#PF: error_code(0x0000) - not-present pageWorkqueue: events tls_sk_proto_closeRIP: 0010:tls_sw_recvmsg+0x3ba/0x780 [tls]Call Trace:<TASK>inet_recvmsg+0x54/0x130sock_recvmsg+0x3f/0x70__sys_recvmsg+0x8a/0x100do_syscall_64+0x58/0x80 - Rapports KASAN : sur les machines disposant d’un noyau instrumenté avec Kernel Address Sanitizer, des alertes
use-after-free in tls_sw_recvmsgidentifient directement l’objet libéré parkfree_skb.
Télémétrie d’hôte & artefacts suspects
Section intitulée « Télémétrie d’hôte & artefacts suspects »- Configuration de sockets non autorisées : surveiller les processus s’exécutant sous des comptes de service (
www-data,nobody) appelantsetsockoptavec le niveauSOL_TCP(6) et l’optionTCP_ULP(31) avec la chaîne"tls". - Transitions de privilèges brutales : corréler les journaux
auditdsignalant des appels àsetuidnon précédés d’authentification PAM classique (sudo,su).
5. Ingénierie de la détection
Section intitulée « 5. Ingénierie de la détection »title: Crash ou panique du sous-système kTLS du noyau Linuxid: d82e1456-913a-4e2b-8711-2b8c9e253968status: experimentaldescription: Détecte les messages de plantage, fautes de protection ou alertes KASAN liés à kTLS, signalant l'exploitation de la CVE-2025-39682.logsource: product: linux service: kerneldetection: selection: - 'tls_sw_recvmsg' - 'BUG: unable to handle page fault' - 'kernel NULL pointer dereference' - 'KASAN: use-after-free in tls_sw_recvmsg' condition: selectionlevel: criticaltags: - attack.privilege_escalation - attack.t1068 - cve.2025-39682# Surveillance des appels setsockopt configurant TCP_ULP vers kTLS-a always,exit -F arch=b64 -S setsockopt -F a1=6 -F a2=31 -k ktls_ulp_register-a always,exit -F arch=b64 -S setsockopt -F a1=282 -k ktls_crypto_config// Détection des anomalies kTLS dans Microsoft Sentinel / Azure MonitorSyslog| where Facility == "kern" or ProcessName == "kernel"| where SyslogMessage has_any ("tls_sw_recvmsg", "net/tls", "tls_sw_ctx_rx")| where SyslogMessage has_any ("BUG: unable", "page fault", "use-after-free", "general protection fault")| project TimeGenerated, HostName, Facility, SyslogMessage| sort by TimeGenerated desc6. Remédiation & stratégie de durcissement
Section intitulée « 6. Remédiation & stratégie de durcissement »Mesures correctives immédiates
Section intitulée « Mesures correctives immédiates »- Mise à jour du noyau : appliquer sans délai les correctifs de maintenance publiés par les éditeurs :
- RHEL 9 / Rocky / AlmaLinux : déployer les avis de sécurité RHSA correspondants.
- Ubuntu 24.04 / 22.04 LTS : installer les noyaux
6.8.0-45-genericou5.15.0-118-generic. - Debian 12 bookworm : appliquer la version
linux-image-6.1.0-25-amd64ou plus récente.
- Conformité CISA KEV : pour les entités assujetties aux directives opérationnelles contraignantes (BOD 22-01), la remédiation doit être finalisée avant le 9 octobre 2026.
Mesure de contournement d’urgence (liste noire du module)
Section intitulée « Mesure de contournement d’urgence (liste noire du module) »S’il est impossible de redémarrer immédiatement les serveurs de production, bloquer le chargement du module kTLS :
# Inscription du module kTLS sur liste noireecho "install tls /bin/true" | sudo tee /etc/modprobe.d/disable-tls.confecho "blacklist tls" | sudo tee -a /etc/modprobe.d/disable-tls.conf
# Déchargement du module s'il n'est pas utilisé par un service actif :sudo modprobe -r tlsRemarque : la désactivation de kTLS entraîne le basculement automatique du trafic TLS vers l’espace utilisateur (OpenSSL / BoringSSL), occasionnant une légère augmentation de la charge CPU sans interruption de service.
7. Liens croisés stratégiques
Section intitulée « 7. Liens croisés stratégiques »8. Sources & références documentaires
Section intitulée « 8. Sources & références documentaires »- Catalogue CISA KEV : CISA Known Exploited Vulnerabilities Catalog (Inscrite le 18-09-2026)
- Dépôt git officiel du noyau Linux : tls: fix handling of zero-length records on the rx_list
- Recherche star Labs SG : Exploring kTLS Receive Path State Machine Vulnerabilities (août 2025)
- Base NVD : fiche CVE-2025-39682