
Technische Analyse von CVE-2026-52924, einer kritischen Use-after-Free-Schwachstelle in der Behandlung veralteter SCTP-Cookies im Linux-Kernel, einschließlich Grundursache, Angriffsablauf, Fix und Erkennungsmethoden.
CVE-ID: CVE-2026-52924
Schweregrad: KRITISCH (CVSS 9.8)
Komponente: Linux-Kernel - SCTP (Stream Control Transmission Protocol)
Typ: Use-After-Free (CWE-416, CWE-825)
Veröffentlicht: 2026-06-24
Status: Behoben
Die Schwachstelle tritt in der Behandlung veralteter COOKIE-ECHO-Pakete durch die SCTP-Zustandsmaschine auf. Das Problem betrifft die unsachgemäße Bereinigung der ausgehenden Stream-Warteschlange, wenn eine Assoziation zurückgesetzt wird.
sctp_stream_update() gibt die alte Stream-Tabelle frei und installiert eine neuestream->out_curr zeigt weiterhin auf den freigegebenen sctp_stream_out-Eintragout_curr->ext zusctp_sf_do_5_2_6_stale():
├─ Empfange Fehler „Veraltetes Cookie"
├─ Setze Assoziationszustand zurück
└─ Rufe sctp_stream_update() auf
├─ Gebe alte Stream-Tabelle frei
├─ Installiere neue Stream-Tabelle
└─ FEHLER: stream->out_curr wird NICHT ungültig gemacht ❌
Später beim Entfernen aus der Warteschlange:
sctp_sched_fcfs_dequeue():
└─ Zugriff auf stream->out_curr->ext (FREIGEGEBENER SPEICHER) 💥
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
Eine naive Lösung könnte darin bestehen, lediglich stream->out_curr zu löschen:
// UNZUREICHENDE LÖSUNG ❌
stream->out_curr = NULL;
Problem: Die Ausgangswarteschlange enthält weiterhin:
Diese veralteten Referenzen verursachen beim Zugriff weiterhin Use-After-Free.
Lösung: Die Ausgangswarteschlange der Assoziation während der Behandlung veralteter Cookies vollständig leeren.
// KORREKTE LÖSUNG ✓
sctp_outq_free(&asoc->outqueue);
Dies stellt sicher:
Datei: net/sctp/sm_statefuns.c
Funktion: sctp_sf_do_5_2_6_stale()
Ergänzung: Aufruf von sctp_outq_free(&asoc->outqueue) vor sctp_stream_update()
enum sctp_disposition sctp_sf_do_5_2_6_stale(...)
{
// ... vorhandener Code ...
// Ausgangswarteschlange leeren, bevor der Stream-Zustand neu aufgebaut wird
sctp_outq_free(&asoc->outqueue);
// Jetzt ist die Aktualisierung des Streams sicher
sctp_stream_update(&asoc->stream, &asoc->c.h_init_tag);
// ... Rest der Funktion ...
}
# KASAN in der Kernel-Konfiguration aktivieren
CONFIG_KASAN=y
CONFIG_KASAN_GENERIC=y
# Laufzeitausgabe zeigt:
BUG: KASAN: slab-use-after-free
# Nach unsicherem stream->out_curr-Zugriff ohne Validierung suchen
grep -r "out_curr->ext" net/sctp/
grep -r "out_curr->" net/sctp/sched*.c
SCTP deaktivieren: SCTP-Modul entfernen oder SCTP-Ports (132, 132 UDP) blockieren
echo "install sctp /bin/true" >> /etc/modprobe.d/sctp-disable.conf
Firewall-Regeln: SCTP-Verkehr an der Netzwerkgrenze blockieren
iptables -A INPUT -p sctp -j DROP
Kernel-Version: Upgrade auf gepatchte Versionen
Den Kernel-Patch anwenden, der sctp_outq_free() in sctp_sf_do_5_2_6_stale() aufruft.
sctp_outq_free() out_curr ordnungsgemäß ungültig macht