Analyse technique de CVE-2026-52924, une vulnérabilité critique de type use-after-free dans la gestion des cookies obsolètes SCTP du noyau Linux, incluant la cause racine, le déroulement de l'attaque, le correctif et les méthodes de détection.
CVE-2026-52924 : Use-After-Free SCTP dans la gestion des cookies obsolètes
Résumé de la vulnérabilité
Identifiant CVE : CVE-2026-52924 Gravité : CRITIQUE (CVSS 9.8) Composant : Noyau Linux - SCTP (Stream Control Transmission Protocol) Type : Use-After-Free (CWE-416, CWE-825) Publié : 2026-06-24 Statut : Corrigé
Versions concernées
Noyau Linux < 5.10.259
Noyau Linux < 5.15.210
Noyau Linux < 6.1.176
Noyau Linux < 6.6.143
Noyau Linux < 6.12.94
Noyau Linux < 6.18.36
Noyau Linux < 7.0.13
Noyau Linux < 7.1
Détails techniques
Cause racine
La vulnérabilité se produit dans la gestion par la machine à états SCTP des paquets COOKIE-ECHO obsolètes. Le problème implique un nettoyage inapproprié de la file d'attente de flux sortant lorsqu'une association est annulée.
Déroulement de l'attaque
Fonctionnement normal : L'association passe à l'état COOKIE_ECHOED
Données utilisateur mises en file d'attente : L'application envoie des données, qui sont mises en file d'attente pour transmission
Erreur de cookie obsolète : Le pair distant envoie une erreur de cookie obsolète
Annulation déclenchée : L'association revient de COOKIE_ECHOED → COOKIE_WAIT
État du flux mis à jour :sctp_stream_update() libère l'ancienne table de flux et en installe une nouvelle
Pointeur invalide :stream->out_curr pointe toujours vers l'entrée sctp_stream_out libérée
Accès de retrait de file : Lorsque l'ordonnanceur tente de retirer de la file (FCFS, RR, PRIO), il accède à out_curr->ext
Use-After-Free : L'accès à la mémoire libérée provoque un crash du noyau détecté par KASAN
Flux de code problématique
root@kitploit:~
sctp_sf_do_5_2_6_stale():
├─ Réception de l'erreur de cookie obsolète
├─ Annulation de l'état de l'association
└─ Appel de sctp_stream_update()
├─ Libération de l'ancienne table de flux
├─ Installation de la nouvelle table de flux
└─ BUG : stream->out_curr NON invalidé ❌
Plus tard lors du retrait de file :
sctp_sched_fcfs_dequeue():
└─ Accès à stream->out_curr->ext (MÉMOIRE LIBÉRÉE) 💥
Exemple de crash
root@kitploit:~
BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140
Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312
CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted 7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)
Call trace:
sctp_sched_fcfs_dequeue+0x13a/0x140
sctp_outq_flush+0x1603/0x33e0
sctp_do_sm+0x31c9/0x5d30
sctp_assoc_bh_rcv+0x392/0x6f0
sctp_inq_push+0x1db/0x270
sctp_rcv+0x138d/0x3c10
Pourquoi une simple mise à jour de out_curr est insuffisante
Un correctif naïf pourrait consister à simplement effacer stream->out_curr :
Toutes les données de transmission en attente sont supprimées
Toutes les entrées de file de retransmission sont libérées
Les pointeurs mis en cache de l'ordonnanceur (out_curr, etc.) sont invalidés
L'état du flux peut être reconstruit en toute sécurité lors du redémarrage COOKIE_WAIT
Aucune référence pendante vers les entrées de flux libérées
Emplacement de l'implémentation
Fichier :net/sctp/sm_statefuns.c Fonction :sctp_sf_do_5_2_6_stale() Ajout : Appel de sctp_outq_free(&asoc->outqueue) avant sctp_stream_update()
root@kitploit:~
enum sctp_disposition sctp_sf_do_5_2_6_stale(...)
{
// ... code existant ...
// Purger la file de sortie avant de reconstruire l'état du flux
sctp_outq_free(&asoc->outqueue);
// Maintenant, la mise à jour du flux est sûre
sctp_stream_update(&asoc->stream, &asoc->c.h_init_tag);
// ... reste de la fonction ...
}
Analyse d'impact
Facteurs de gravité (CVSS 9.8)
Vecteur d'attaque : Réseau (CVSS:3.1/AV:N)
Complexité de l'attaque : Faible (CVSS:3.1/AC:L)
Privilèges requis : Aucun (CVSS:3.1/PR:N)
Interaction utilisateur : Aucune (CVSS:3.1/UI:N)
Portée : Inchangée (CVSS:3.1/S:U)
Impact sur la confidentialité : Élevé (CVSS:3.1/C:H)
Impact sur l'intégrité : Élevé (CVSS:3.1/I:H)
Impact sur la disponibilité : Élevé (CVSS:3.1/A:H)
Conditions d'exploitation
Accès réseau au système cible (port SCTP ouvert)
Capacité d'envoyer des paquets SCTP pour établir une connexion
Envoi d'une erreur de cookie obsolète à un moment précis (état COOKIE_ECHOED)
Déclenchement de l'opération de retrait de file de l'ordonnanceur
Scénarios d'attaque
Déni de service : Crash répété du noyau → DoS
Divulgation d'informations : Lecture de la mémoire du noyau via UAF
Élévation de privilèges : Potentielle via la manipulation de la mémoire
Exécution de code à distance : Possible avec une exploitation de corruption mémoire
Méthodes de détection
Détection KASAN (exécution)
root@kitploit:~
# Activer KASAN dans la configuration du noyau
CONFIG_KASAN=y
CONFIG_KASAN_GENERIC=y
# La sortie à l'exécution montre :
BUG: KASAN: slab-use-after-free
Analyse statique
root@kitploit:~
# Rechercher les accès dangereux à stream->out_curr sans validation
grep -r "out_curr->ext" net/sctp/
grep -r "out_curr->" net/sctp/sched*.c
Détection réseau
Surveiller les paquets d'erreur SCTP Stale Cookie (Type 3, Code 1)
Suivre les schémas d'annulation de connexion
Alerter sur les transitions rapides COOKIE_ECHOED → COOKIE_WAIT
Stratégies d'atténuation
Atténuations temporaires (jusqu'au correctif)
Désactiver SCTP : Supprimer le module SCTP ou bloquer les ports SCTP (132, 132 UDP)