CVE-2021-46999
Severity CVSS v4.0:
Pending analysis
Type:
CWE-416
Use After Free
Publication date:
28/02/2024
Last modified:
08/01/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
sctp: do asoc update earlier in sctp_sf_do_dupcook_a<br />
<br />
There&#39;s a panic that occurs in a few of envs, the call trace is as below:<br />
<br />
[] general protection fault, ... 0x29acd70f1000a: 0000 [#1] SMP PTI<br />
[] RIP: 0010:sctp_ulpevent_notify_peer_addr_change+0x4b/0x1fa [sctp]<br />
[] sctp_assoc_control_transport+0x1b9/0x210 [sctp]<br />
[] sctp_do_8_2_transport_strike.isra.16+0x15c/0x220 [sctp]<br />
[] sctp_cmd_interpreter.isra.21+0x1231/0x1a10 [sctp]<br />
[] sctp_do_sm+0xc3/0x2a0 [sctp]<br />
[] sctp_generate_timeout_event+0x81/0xf0 [sctp]<br />
<br />
This is caused by a transport use-after-free issue. When processing a<br />
duplicate COOKIE-ECHO chunk in sctp_sf_do_dupcook_a(), both COOKIE-ACK<br />
and SHUTDOWN chunks are allocated with the transort from the new asoc.<br />
However, later in the sideeffect machine, the old asoc is used to send<br />
them out and old asoc&#39;s shutdown_last_sent_to is set to the transport<br />
that SHUTDOWN chunk attached to in sctp_cmd_setup_t2(), which actually<br />
belongs to the new asoc. After the new_asoc is freed and the old asoc<br />
T2 timeout, the old asoc&#39;s shutdown_last_sent_to that is already freed<br />
would be accessed in sctp_sf_t2_timer_expire().<br />
<br />
Thanks Alexander and Jere for helping dig into this issue.<br />
<br />
To fix it, this patch is to do the asoc update first, then allocate<br />
the COOKIE-ACK and SHUTDOWN chunks with the &#39;updated&#39; old asoc. This<br />
would make more sense, as a chunk from an asoc shouldn&#39;t be sent out<br />
with another asoc. We had fixed quite a few issues caused by this.
Impact
Base Score 3.x
7.80
Severity 3.x
HIGH
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.19.123 (including) | 4.19.191 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.4.41 (including) | 5.4.120 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.7 (including) | 5.10.38 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.11.22 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.12 (including) | 5.12.5 (excluding) |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/0bfd913c2121b3d553bfd52810fe6061d542d625
- https://git.kernel.org/stable/c/35b4f24415c854cd718ccdf38dbea6297f010aae
- https://git.kernel.org/stable/c/61b877bad9bb0d82b7d8841be50872557090a704
- https://git.kernel.org/stable/c/b1b31948c0af44628e43353828453461bb74098f
- https://git.kernel.org/stable/c/d624f2991b977821375fbd56c91b0c91d456a697
- https://git.kernel.org/stable/c/f01988ecf3654f805282dce2d3bb9afe68d2691e
- https://git.kernel.org/stable/c/0bfd913c2121b3d553bfd52810fe6061d542d625
- https://git.kernel.org/stable/c/35b4f24415c854cd718ccdf38dbea6297f010aae
- https://git.kernel.org/stable/c/61b877bad9bb0d82b7d8841be50872557090a704
- https://git.kernel.org/stable/c/b1b31948c0af44628e43353828453461bb74098f
- https://git.kernel.org/stable/c/d624f2991b977821375fbd56c91b0c91d456a697
- https://git.kernel.org/stable/c/f01988ecf3654f805282dce2d3bb9afe68d2691e



