Like a booby-trapped lock on a door nobody installed — dangerous if you have it, but most buildings don't
CVE-2026-52924 is a use-after-free in the Linux kernel's SCTP (Stream Control Transmission Protocol) subsystem. When a remote peer sends a Stale Cookie ERROR during SCTP association setup, the kernel rolls the association back from COOKIE_ECHOED to COOKIE_WAIT. During this rollback, sctp_stream_update() frees the old stream table and installs a new one, but fails to invalidate cached pointers like stream->out_curr. Later dequeue operations (FCFS, RR, PRIO schedulers) dereference the stale pointer, crashing the kernel. Affected: all kernels prior to 7.1-rc7; backport fixes land in 5.10.259, 6.1.176, 6.12.94, and 7.0.13. The SCTP kernel module (sctp.ko) must be loaded for the vulnerability to be reachable.
The NVD vendor score of 9.8 CRITICAL (AV:N/AC:L/PR:N/UI:N) is misleading. Red Hat independently scored this 7.0 HIGH with AC:H and downgraded confidentiality and integrity to Low, reflecting the reality that exploitation requires a specific timing window during the stale cookie rollback sequence *and* that reliable code execution from this UAF is unproven. The primary confirmed impact is a kernel panic — a denial-of-service. The 9.8 assumes trivial exploitation and full CIA impact, which does not match the evidence. Red Hat's 7.0 is closer to reality, and even that may be generous given how rarely SCTP is deployed in enterprise environments.
4 steps from start to impact.
SCTP module must be loaded on target
sctp kernel module is not loaded by default on most enterprise Linux distributions (RHEL, Ubuntu, Debian). It is typically only present on telecom infrastructure (5G core, IMS, Diameter servers), some Kubernetes multi-homing configurations, or hosts explicitly configured for SCTP. Without the module loaded, the entire attack surface is absent.- Target host has sctp.ko loaded
- SCTP port is reachable from attacker network
- Vast majority of enterprise Linux hosts (~95%+) never load the SCTP module
- Enterprise firewalls typically block SCTP protocol (IP protocol 132) at the perimeter
lsmod | grep sctp or check /proc/modules for sctp. Nessus plugin family 'Local Security Checks' will flag the kernel version.Initiate SCTP association and trigger stale cookie
- Network path allows SCTP packets to reach the target
- Server SCTP cookie lifetime is short enough or attacker can delay sufficiently
- The timing window is tight — Red Hat rates this AC:H for good reason
- Attacker cannot directly control server-side cookie expiration settings
Trigger rollback with queued outbound data
sctp_stream_update() frees the old stream output table, but the scheduler's out_curr pointer still references freed memory. This is a race between data queuing and the rollback path.- Application on the target has queued outbound SCTP data during the COOKIE-ECHO phase
- Rollback and dequeue must interleave in the right order
- Requires specific application behavior on the target — not all SCTP applications queue data this early
- Race condition makes exploitation non-deterministic
Kernel dereferences stale pointer — crash or worse
out_curr pointer into freed memory. The reliable outcome is a kernel panic (DoS). Theoretical code execution would require heap grooming to place attacker-controlled data in the freed slab — possible in principle for UAFs but undemonstrated for this specific bug. No public PoC achieves code execution.- Steps 1-3 succeeded
- For code execution: attacker must win heap spray race in kernel slab allocator
- Kernel ASLR (KASLR), SLAB_FREELIST_HARDENED, and CONFIG_INIT_ON_FREE_DEFAULT_ON on modern kernels make heap grooming extremely difficult
- No public exploit or PoC exists demonstrating anything beyond DoS
sctp_stream_* functions is a clear indicator. kdump or crash logs will show the UAF.The supporting signals.
| In-the-Wild Exploitation | None observed. Not listed in CISA KEV. No reports from Mandiant, CrowdStrike, or other threat intel vendors as of 2026-09-05. |
|---|---|
| Proof-of-Concept | No public PoC. No exploit code found on GitHub, Exploit-DB, or researcher disclosures. The bug was found via code audit / fuzzing during kernel development. |
| EPSS Score | 0.00344 (0.34%) — bottom quartile. FIRST model predicts very low probability of exploitation in the next 30 days. |
| CISA KEV Status | Not listed as of 2026-09-05. |
| NVD CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8). Red Hat disputes: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:H (7.0). The AC and CIA disagreement is significant — Red Hat's vector is more accurate. |
| Affected Versions | All Linux kernels with SCTP support prior to 7.1-rc7 upstream. Essentially all stable branches until patched. |
| Fixed Versions | Upstream: 7.1-rc7 (commit e374b22e). Debian: 5.10.259-1 (bullseye), 6.1.176-1 (bookworm), 6.12.94-1 (trixie), 7.0.13-1 (sid). RHEL: under investigation. |
| Scanning / Exposure | SCTP has minimal internet exposure. Shodan/Censys show very few SCTP services publicly reachable compared to TCP. SCTP is primarily used in telecom backhaul and internal Diameter/SS7 networks, not internet-facing services. |
| Disclosure Date | 2026-06-24 via upstream kernel mailing list. |
| Reporter | Discovered during kernel development / code review. No individual researcher credited in public advisories. |
noisgate verdict.
The single most decisive factor is the high attack complexity combined with the SCTP module's narrow deployment footprint — fewer than 5% of enterprise Linux hosts load sctp.ko, and even on those hosts the stale-cookie race condition is non-trivial to trigger reliably. The vendor's 9.8 assumes trivial network exploitation with full CIA impact, which Red Hat's independent 7.0 assessment and the absence of any PoC or in-the-wild exploitation directly contradict.
Why this verdict
- Attack complexity is HIGH, not LOW. Red Hat independently rated AC:H because the stale cookie rollback must race with queued outbound data dequeue — a timing-dependent condition the attacker cannot fully control. The NVD AC:L rating is indefensible for this bug class.
- SCTP module deployment is extremely narrow. In a typical 10,000-host enterprise fleet, fewer than 500 hosts (often zero) will have
sctp.koloaded. The module is not loaded by default on RHEL, Ubuntu, or Debian. This dramatically shrinks the reachable attack surface. - No PoC, no exploitation, rock-bottom EPSS. EPSS of 0.34% places this in the bottom quartile. Zero public exploit code exists. No threat actor has been observed targeting this bug. The theoretical-to-practical gap is wide.
- Primary confirmed impact is DoS, not RCE. While UAFs *can* lead to code execution, this specific bug's heap layout and timing constraints make reliable exploitation for code execution speculative. Kernel hardening features (KASLR, slab freelist randomization, init-on-free) add further friction.
- Role multiplier: On *telecom infrastructure* (5G core, IMS, Diameter) where SCTP is a core protocol, the blast radius of a kernel crash is service-level DoS affecting mobile subscribers — this is a high-value role and prevents downgrading below HIGH. On standard enterprise servers (web, app, DB tiers), SCTP is absent and the vuln is unreachable. On Kubernetes nodes using SCTP multihoming (rare), a kernel panic could disrupt container workloads but is contained to one node. The telecom use case — where SCTP is canonically deployed and the blast radius is carrier-grade service disruption — sets the floor at HIGH.
Why not higher?
CRITICAL would require either demonstrated code execution (there is none), active exploitation (there is none), or trivial exploitability on a broadly deployed component. SCTP's narrow footprint means the vast majority of Linux hosts are simply not vulnerable. The attack complexity is genuinely high, and the confirmed impact ceiling is DoS, not full system compromise.
Why not lower?
MEDIUM would undercount the risk to the telecom and carrier infrastructure segment where SCTP is a first-class protocol and kernel crashes cause real service outages. The bug *is* network-reachable without authentication, and UAFs in the kernel are inherently dangerous even when current exploitation is unproven — the primitive exists and could be weaponized. Red Hat's 7.0 confirms this belongs in the HIGH bucket.
What to do — in priority order.
- Unload and blacklist the SCTP kernel module on hosts that don't need it — Run
modprobe -r sctpand addinstall sctp /bin/falseto/etc/modprobe.d/disable-sctp.conf. This completely eliminates the attack surface. Deploy within 30 days per the noisgate mitigation SLA for HIGH. On hosts that *do* need SCTP, this is not an option — proceed to patching. - Block SCTP at the network perimeter — Add firewall rules to drop IP protocol 132 (SCTP) at perimeter firewalls and host-based firewalls (
iptables -A INPUT -p sctp -j DROP) for any host not explicitly requiring SCTP. This prevents remote exploitation from untrusted networks. Deploy within 30 days. - Prioritize kernel patching on SCTP-enabled hosts — Identify hosts with
sctpmodule loaded (lsmod | grep sctpfleet-wide) and fast-track kernel updates to fixed versions (6.1.176+, 6.12.94+, 7.0.13+). These hosts are your actual risk population. Target 30-day deployment for the mitigation, 180-day full remediation per noisgate SLA. - Enable kernel hardening features — Ensure
CONFIG_INIT_ON_FREE_DEFAULT_ON=y, KASLR enabled, andCONFIG_SLAB_FREELIST_HARDENED=yin your kernel config. These make UAF exploitation for code execution significantly harder, reducing the risk from DoS-only to even-less-likely-RCE.
- WAF / IDS signature-based blocking — SCTP is not HTTP. Web application firewalls do not inspect SCTP traffic. You need protocol-level firewall rules (IP proto 132), not application-layer inspection.
- SELinux / AppArmor — These confine userspace processes, not kernel-level UAFs. The crash occurs in kernel context before any MAC policy is evaluated.
- TCP SYN cookies or TCP hardening — SCTP is a separate transport protocol from TCP. TCP-level hardening has zero effect on SCTP association handling.
Crowdsourced verification payload.
Run this script as root on each target Linux host to check whether the SCTP module is loaded and whether the running kernel version is patched. No arguments needed: sudo bash check_cve_2026_52924.sh. Works on RHEL, Debian, Ubuntu, and derivatives.
#!/bin/bash
# check_cve_2026_52924.sh — CVE-2026-52924 SCTP UAF checker
# Run as root on target Linux host
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -euo pipefail
RESULT="UNKNOWN"
SCTP_LOADED=false
# Check if SCTP module is loaded or built-in
if lsmod 2>/dev/null | grep -q '^sctp '; then
SCTP_LOADED=true
echo "[!] SCTP module is LOADED — attack surface is present"
elif grep -q 'sctp' /proc/modules 2>/dev/null; then
SCTP_LOADED=true
echo "[!] SCTP module is LOADED — attack surface is present"
elif [ -f /boot/config-$(uname -r) ] && grep -q 'CONFIG_IP_SCTP=y' /boot/config-$(uname -r) 2>/dev/null; then
SCTP_LOADED=true
echo "[!] SCTP is compiled into the kernel (built-in) — attack surface is present"
else
echo "[*] SCTP module is NOT loaded and not built-in — attack surface absent"
echo "PATCHED (not applicable — SCTP not present)"
exit 0
fi
# Get kernel version
KERNEL=$(uname -r)
echo "[*] Running kernel: $KERNEL"
# Extract version components
MAJOR=$(echo "$KERNEL" | cut -d. -f1)
MINOR=$(echo "$KERNEL" | cut -d. -f2)
PATCH=$(echo "$KERNEL" | sed 's/^[0-9]*\.[0-9]*\.//' | sed 's/[^0-9].*//')
# Check against known fixed versions
# Upstream: 7.1-rc7+
# Debian backports: 5.10.259+, 6.1.176+, 6.12.94+, 7.0.13+
check_fixed() {
if [ "$MAJOR" -gt 7 ]; then
return 0 # fixed
elif [ "$MAJOR" -eq 7 ] && [ "$MINOR" -ge 1 ]; then
return 0 # 7.1+ fixed
elif [ "$MAJOR" -eq 7 ] && [ "$MINOR" -eq 0 ] && [ "$PATCH" -ge 13 ]; then
return 0 # 7.0.13+ fixed
elif [ "$MAJOR" -eq 6 ] && [ "$MINOR" -eq 12 ] && [ "$PATCH" -ge 94 ]; then
return 0
elif [ "$MAJOR" -eq 6 ] && [ "$MINOR" -eq 1 ] && [ "$PATCH" -ge 176 ]; then
return 0
elif [ "$MAJOR" -eq 5 ] && [ "$MINOR" -eq 10 ] && [ "$PATCH" -ge 259 ]; then
return 0
fi
return 1
}
if check_fixed; then
echo "PATCHED — kernel $KERNEL includes the fix for CVE-2026-52924"
exit 0
else
if [ "$SCTP_LOADED" = true ]; then
echo "VULNERABLE — kernel $KERNEL is unpatched AND SCTP is active"
exit 1
else
echo "VULNERABLE — kernel $KERNEL is unpatched (SCTP not loaded, but module could be loaded)"
exit 1
fi
fiIf you remember one thing.
lsmod | grep sctp across your fleet to identify the hosts that actually have SCTP loaded — that's your real risk population, likely a small fraction of your 10,000 hosts. For any host *not* using SCTP, blacklist the module immediately (echo 'install sctp /bin/false' > /etc/modprobe.d/disable-sctp.conf) — this takes the CVE off the table entirely. For hosts that *require* SCTP (telecom, Diameter, some K8s configs), block external SCTP ingress at the firewall and schedule kernel patching to the fixed versions (6.1.176+, 6.12.94+, 7.0.13+) within the noisgate mitigation SLA of 30 days for HIGH-severity findings. Full fleet kernel remediation should complete within the noisgate remediation SLA of 180 days. There is no active exploitation and no PoC, so this is a scheduled patch, not an emergency — but don't let it slip past the 30-day mitigation window on your SCTP-enabled hosts.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.