ZeroHour

CVE-2026-74586

PoC moderate

Use-after-free in Linux kernel SCTP ASCONF transport handling

CVSS 3.1
9.8 critical
EPSS
<1%p41
Published
()
Modified
AI analysis

CVE-2026-74586 is a use-after-free in the Linux kernel's SCTP implementation: sctp_process_asconf_param() stores a newly added peer transport in asoc->new_transport, and when the same authenticated ASCONF chunk also contains a wildcard DEL-IP parameter, the removal (via sctp_assoc_del_nonprimary_peers()) frees that transport without clearing the stored pointer. A remote SCTP peer can trigger it by adding and wildcard-removing a transport in one ASCONF chunk; a local-address replacement (src_out_of_asoc_ok) keeps the resulting HEARTBEAT queued on control_chunk_list, and after RCU frees the transport, a successful ASCONF_ACK releases the queued HEARTBEAT and sctp_outq_select_transport() reads the freed transport->state (a four-byte read). An attacker gains at minimum a kernel memory-safety error — reproduced as a KASAN slab-use-after-free on an unpatched kernel — which can crash the kernel (denial of service); the assigned CVSS 9.8 (AV:N/AC:L/PR:N/UI:N, C:H/I:H/A:H) reflects potential broader confidentiality/integrity/availability impact, though the reproducer used an authenticated peer. Affected systems are Linux kernels with the SCTP module running services that accept authenticated ASCONF (dynamic-address) peer traffic; no specific vulnerable version ranges were provided, and the fix clears new_transport when the peer transport is removed. The flaw was found during a static audit of SCTP objects, has one public PoC, is not in CISA KEV, and EPSS assigns a 0.5% 30-day exploitation probability, so no in-the-wild exploitation is currently known.

What to do: Deploy a kernel that includes the fix clearing asoc->new_transport when a peer transport is removed (no fixed version number is available in this data — track your distribution's kernel updates for the SCTP ASCONF use-after-free backport). Restrict exposure by firewalling SCTP (IP protocol 132) at the network edge or disabling SCTP-AUTH/ASCONF (dynamic address) support on hosts that do not need it, and audit whether any listening SCTP sockets accept peer ASCONF messages.

Affected
Linux kernel (SCTP subsystem, net/sctp)
Estimated exposure
moderateLikely on the order of thousands (roughly 1k–10k) of SCTP-enabled hosts exposing services that accept authenticated ASCONF traffic; exact count unknown — SCTP is enabled on only a small minority of hosts (telecom/SIGTRAN signaling, some media and signaling gateways), and only the subset with SCTP-AUTH and ASCONF/dynamic-address support and a remote peer able to send crafted ASCONFs is…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: sctp: clear new_transport when removing a peer sctp_process_asconf_param() stores a newly added peer transport in asoc->new_transport. After all parameters in the ASCONF chunk have been processed, sctp_sf_do_asconf() uses this pointer to send a HEARTBEAT to the new transport. An authenticated ASCONF from a remote SCTP peer can add a transport and remove it again with a wildcard DEL-IP parameter in the same chunk. The wildcard deletion preserves the transport on which the ASCONF arrived, but removes the newly added transport through sctp_assoc_del_nonprimary_peers(). The removal does not clear asoc->new_transport, leaving it pointing to the removed transport. sctp_sf_do_asconf() then creates a HEARTBEAT whose chunk->transport points to the removed transport without holding a transport reference. During local address replacement, src_out_of_asoc_ok keeps this HEARTBEAT on control_chunk_list. After the transport is freed by RCU, a successful ASCONF_ACK for the replacement address releases the queued HEARTBEAT and sctp_outq_select_transport() reads the freed transport's state. The issue was found during a static audit of SCTP objects. With an authenticated peer, the reproducer triggered the same KASAN report in 2 of 2 unpatched runs on a KASAN-enabled netdev/main kernel: BUG: KASAN: slab-use-after-free in sctp_outq_select_transport Read of size 4 at addr ffff88800b9bd95c by task python3/197 Call Trace: sctp_outq_select_transport+0x549/0x8b0 [sctp] sctp_outq_flush+0x306/0x2c60 [sctp] sctp_transport_immediate_rtx+0xaf/0x260 [sctp] sctp_process_asconf_ack+0xa48/0xf70 [sctp] Allocated by task 197: sctp_transport_new+0x68/0x650 [sctp] sctp_assoc_add_peer+0x258/0x12a0 [sctp] sctp_process_asconf+0x5e9/0x1090 [sctp] Last potentially related work creation: __call_rcu_common.constprop.0+0x77/0xb70 sctp_assoc_del_nonprimary_peers+0x7c/0xd0 [sctp] sctp_process_asconf+0xd9c/0x1090 [sctp] The first invalid access was a four-byte read of transport->state at net/sctp/outqueue.c:833. The same reproducer completed the full authenticated ASCONF and local-address replacement sequence with this change without a KASAN report or oops. Clear new_transport when its peer is removed, before it can be used to create the HEARTBEAT.

Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

In the news

No ingested article mentions this CVE yet.