
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.
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é
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.
sctp_stream_update() libère l'ancienne table de flux et en installe une nouvellestream->out_curr pointe toujours vers l'entrée sctp_stream_out libéréeout_curr->extsctp_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) 💥
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
Un correctif naïf pourrait consister à simplement effacer stream->out_curr :
// CORRECTIF INSUFFISANT ❌
stream->out_curr = NULL;
Problème : La file de sortie contient toujours :
Ces références obsolètes provoqueront toujours un use-after-free lors de leur accès.
Solution : Purger entièrement la file de sortie de l'association lors de la gestion des cookies obsolètes.
// CORRECTIF APPROPRIÉ ✓
sctp_outq_free(&asoc->outqueue);
Cela garantit :
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()
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 ...
}
# 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
# 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ésactiver SCTP : Supprimer le module SCTP ou bloquer les ports SCTP (132, 132 UDP)
echo "install sctp /bin/true" >> /etc/modprobe.d/sctp-disable.conf
Règles de pare-feu : Bloquer le trafic SCTP à la frontière du réseau
iptables -A INPUT -p sctp -j DROP
Version du noyau : Mettre à niveau vers les versions corrigées
Appliquer le correctif du noyau qui appelle sctp_outq_free() dans sctp_sf_do_5_2_6_stale().
sctp_outq_free() invalide correctement out_curr