In the Linux kernel, the following vulnerability has been resolved:
sctp: drop a chunk if its transport was removed
sctp_rcv() resolves the transport once per packet and leaves it in
chunk->transport. The lookup reference, or the one sctp_add_backlog() takes
if the socket is owned by userspace, keeps it around until the chunk has
been processed.
An authenticated ASCONF DEL-IP can remove it in the meantime.
sctp_assoc_rm_peer() takes the transport out of the association and calls
sctp_transport_free(), which tags it dead and drops the reference the
association held. There is a window on both paths: the packet can sit on
the socket backlog, and on the direct path the lookup completes before
bh_lock_sock().
The DATA chunk in that packet puts the removed transport back into
asoc->peer.last_data_from. Once the packet is done that reference goes
away and the transport is freed by RCU, so the next delayed SACK carries
the pointer into the SACK chunk and sctp_outq_select_transport() reads the
freed transport's state.
Drop the chunk in sctp_inq_push(), next to the existing rcvr->dead check.
Both paths reach it with the association's socket lock held. The peer
retransmits it.
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS Score: 9.8
AV:N - A remote SCTP peer reaches the bug via received packets in sctp_rcv() on internet-facing SCTP servers and telecom endpoints; DATA that already resolved a transport is processed after an authenticated ASCONF DEL-IP (or COOKIE-ECHO restart) has removed that peer.
AC:L - The attacker controls both sides of the race by sending ASCONF DEL-IP (or a restart that calls sctp_assoc_rm_peer) and a DATA chunk whose lookup already holds the doomed transport; the backlog path is FIFO-deterministic while the socket is in a syscall, and the direct path is a bh_lock_sock race the attacker creates.
PR:N - Exploitation requires only a network-reachable established SCTP association; no local Linux credentials, capabilities, or namespaces are needed, and SCTP-AUTH keys used for ASCONF come from the handshake the peer itself performs.
UI:N - Inbound SCTP packets are processed automatically in softirq or socket backlog on a listening or already-associated endpoint; no victim user action such as opening a file or mounting a device is required.
S:U - Impact is kernel memory corruption and potential privilege escalation within the host SCTP stack; it does not cross a VM, IOMMU, or other security-authority boundary.
C:H - DATA processing plants the removed transport into asoc->peer.last_data_from; after the lookup reference is dropped the object is RCU-freed, and the next delayed SACK dereferences the freed sctp_transport in sctp_outq_select_transport(), a UAF that enables arbitrary kernel disclosure via heap grooming.
I:H - sctp_outq_select_transport() does list_add_tail() into the freed send_ready field, and sctp_packet_config()/sctp_transport_burst_limited() write vtag, pathmtu, cwnd, and burst_limited into the reclaimed slab object, yielding arbitrary write and control-flow hijack primitives.
A:H - Dereferencing the freed transport during delayed SACK transmission can immediately oops or panic the kernel, and the UAF can be triggered repeatedly by a malicious SCTP peer.
| Attack Vector |
Network |
Scope |
Unchanged |
| Attack Complexity |
Low |
Confidentiality Impact |
High |
| Privileges Required |
None |
Integrity Impact |
High |
| User Interaction |
None |
Availability Impact |
High |
AV:N - A remote SCTP peer reaches the bug via received packets in sctp_rcv() on internet-facing SCTP servers and telecom endpoints; DATA that already resolved a transport is processed after an authenticated ASCONF DEL-IP (or COOKIE-ECHO restart) has removed that peer.
AC:L - The attacker controls both sides of the race by sending ASCONF DEL-IP (or a restart that calls sctp_assoc_rm_peer) and a DATA chunk whose lookup already holds the doomed transport; the backlog path is FIFO-deterministic while the socket is in a syscall, and the direct path is a bh_lock_sock race the attacker creates.
PR:N - Exploitation requires only a network-reachable established SCTP association; no local Linux credentials, capabilities, or namespaces are needed, and SCTP-AUTH keys used for ASCONF come from the handshake the peer itself performs.
UI:N - Inbound SCTP packets are processed automatically in softirq or socket backlog on a listening or already-associated endpoint; no victim user action such as opening a file or mounting a device is required.
S:U - Impact is kernel memory corruption and potential privilege escalation within the host SCTP stack; it does not cross a VM, IOMMU, or other security-authority boundary.
C:H - DATA processing plants the removed transport into asoc->peer.last_data_from; after the lookup reference is dropped the object is RCU-freed, and the next delayed SACK dereferences the freed sctp_transport in sctp_outq_select_transport(), a UAF that enables arbitrary kernel disclosure via heap grooming.
I:H - sctp_outq_select_transport() does list_add_tail() into the freed send_ready field, and sctp_packet_config()/sctp_transport_burst_limited() write vtag, pathmtu, cwnd, and burst_limited into the reclaimed slab object, yielding arbitrary write and control-flow hijack primitives.
A:H - Dereferencing the freed transport during delayed SACK transmission can immediately oops or panic the kernel, and the UAF can be triggered repeatedly by a malicious SCTP peer.
CVSS 3.1