Linux: Use After Free
CVE-2024-50154 is a high-severity use after free vulnerability in Linux, with a CVSS 3.1 base score of 7.0 out of 10. It can be exploited with local access to the system by an attacker with a low-privileged account, without any action from a user. The record lists versions 106e457953315e476b3642ef24be25ed862aaba3, c964bf65f80a14288d767023a1b300b30f5b9cd0, 8459d61fbf24967839a70235165673148c7c7f17 as the first without the flaw, so updating Linux to one of those releases or later removes the exposure. There is no confirmed exploitation so far. EPSS estimates a 0.56% chance of exploitation within 30 days, which is low compared with other CVEs.
High severity with no evidence of exploitation so far.
What to do
- Update Linux to 106e457953315e476b3642ef24be25ed862aaba3 or c964bf65f80a14288d767023a1b300b30f5b9cd0 or 8459d61fbf24967839a70235165673148c7c7f17 or 5071beb59ee416e8ab456ac8647a4dabcda823b1, whichever matches your release line, or a later version.
- Update Linux Kernel to 4.2 or 5.15.170 or 6.1.115 or 6.6.59, whichever matches your release line, or a later version.
Affected products and versions
| Vendor | Product | Affected versions | Fixed in |
|---|---|---|---|
| Linux | Linux | 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af up to, but not including, 106e457953315e476b3642ef24be25ed862aaba3; 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af up to, but not including, c964bf65f80a14288d767023a1b300b30f5b9cd0; 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af up to, but not including, 8459d61fbf24967839a70235165673148c7c7f17; 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af up to, but not including, 5071beb59ee416e8ab456ac8647a4dabcda823b1; 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af up to, but not including, 997ae8da14f1639ce6fb66a063dab54031cd61b3; 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af up to, but not including, 51e34db64f4e43c7b055ccf881b7f3e0c31bb26d; 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af up to, but not including, e8c526f2bdf1845bedaf6a478816a3d06fa78b8f; d3a1196bfc462943694623412d8e03aaf172bdc1; and 2 more ranges | 106e457953315e476b3642ef24be25ed862aaba3, c964bf65f80a14288d767023a1b300b30f5b9cd0, 8459d61fbf24967839a70235165673148c7c7f17, 5071beb59ee416e8ab456ac8647a4dabcda823b1, 997ae8da14f1639ce6fb66a063dab54031cd61b3, 51e34db64f4e43c7b055ccf881b7f3e0c31bb26d |
| Linux | Linux Kernel | 4.1.11 up to, but not including, 4.2; 4.2 up to, but not including, 5.15.170; 5.16 up to, but not including, 6.1.115; 6.2 up to, but not including, 6.6.59; 6.7 up to, but not including, 6.11.6; 6.12 | 4.2, 5.15.170, 6.1.115, 6.6.59, 6.11.6 |
Version data comes from the organisation that assigned the CVE. Confirm against the vendor advisory before deciding you are unaffected.
How the severity score breaks down
- Attack vector
- LocalThe attacker needs local access or must trick a user into running something.
- Attack complexity
- HighSuccess depends on conditions outside the attacker's control.
- Privileges required
- LowA basic user account is enough.
- User interaction
- NoneNo action by a victim is required.
- Scope
- UnchangedImpact stays within the vulnerable component.
- Confidentiality
- HighAll data handled by the component can be read.
- Integrity
- HighData or code can be modified at will.
- Availability
- HighThe component can be taken down completely.
Vector: CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H. Scored by NVD.
| Scoring system | Score | Severity | Scored by |
|---|---|---|---|
| CVSS 3.1 | 9.8 | Critical | CNA |
| CVSS 3.1 | 7.0 | High | NVD |
| CVSS 3.1 | 7.8 | High | CISA (ADP) |
Official description
In the Linux kernel, the following vulnerability has been resolved: tcp/dccp: Don't use timer_pending() in reqsk_queue_unlink(). Martin KaFai Lau reported use-after-free [0] in reqsk_timer_handler(). """ We are seeing a use-after-free from a bpf prog attached to trace_tcp_retransmit_synack. The program passes the req->sk to the bpf_sk_storage_get_tracing kernel helper which does check for null before using it. """ The commit 83fccfc3940c ("inet: fix potential deadlock in reqsk_queue_unlink()") added timer_pending() in reqsk_queue_unlink() not to call del_timer_sync() from reqsk_timer_handler(), but it introduced a small race window. Before the timer is called, expire_timers() calls detach_timer(timer, true) to clear timer->entry.pprev and marks it as not pending. If reqsk_queue_unlink() checks timer_pending() just after expire_timers() calls detach_timer(), TCP will miss del_timer_sync(); the reqsk timer will continue running and send multiple SYN+ACKs until it expires. The reported UAF could happen if req->sk is close()d earlier than the timer expiration, which is 63s by default. The scenario would be 1. inet_csk_complete_hashdance() calls inet_csk_reqsk_queue_drop(), but del_timer_sync() is missed 2. reqsk timer is executed and scheduled again 3. req->sk is accept()ed and reqsk_put() decrements rsk_refcnt, but reqsk timer still has another one, and inet_csk_accept() does not clear req->sk for non-TFO sockets 4. sk is close()d 5. reqsk timer is executed again, and BPF touches req->sk Let's not use timer_pending() by passing the caller context to __inet_csk_reqsk_queue_drop(). Note that reqsk timer is pinned, so the issue does not happen in most use cases. [1] [0] BUG: KFENCE: use-after-free read in bpf_sk_storage_get_tracing+0x2e/0x1b0 Use-after-free read at 0x00000000a891fb3a (in kfence-#1): bpf_sk_storage_get_tracing+0x2e/0x1b0 bpf_prog_5ea3e95db6da0438_tcp_retransmit_synack+0x1d20/0x1dda bpf_trace_run2+0x4c/0xc0 tcp_rtx_synack+0xf9/0x100 reqsk_timer_handler+0xda/0x3d0 run_timer_softirq+0x292/0x8a0 irq_exit_rcu+0xf5/0x320 sysvec_apic_timer_interrupt+0x6d/0x80 asm_sysvec_apic_timer_interrupt+0x16/0x20 intel_idle_irq+0x5a/0xa0 cpuidle_enter_state+0x94/0x273 cpu_startup_entry+0x15e/0x260 start_secondary+0x8a/0x90 secondary_startup_64_no_verify+0xfa/0xfb kfence-#1: 0x00000000a72cc7b6-0x00000000d97616d9, size=2376, cache=TCPv6 allocated by task 0 on cpu 9 at 260507.901592s: sk_prot_alloc+0x35/0x140 sk_clone_lock+0x1f/0x3f0 inet_csk_clone_lock+0x15/0x160 tcp_create_openreq_child+0x1f/0x410 tcp_v6_syn_recv_sock+0x1da/0x700 tcp_check_req+0x1fb/0x510 tcp_v6_rcv+0x98b/0x1420 ipv6_list_rcv+0x2258/0x26e0 napi_complete_done+0x5b1/0x2990 mlx5e_napi_poll+0x2ae/0x8d0 net_rx_action+0x13e/0x590 irq_exit_rcu+0xf5/0x320 common_interrupt+0x80/0x90 asm_common_interrupt+0x22/0x40 cpuidle_enter_state+0xfb/0x273 cpu_startup_entry+0x15e/0x260 start_secondary+0x8a/0x90 secondary_startup_64_no_verify+0xfa/0xfb freed by task 0 on cpu 9 at 260507.927527s: rcu_core_si+0x4ff/0xf10 irq_exit_rcu+0xf5/0x320 sysvec_apic_timer_interrupt+0x6d/0x80 asm_sysvec_apic_timer_interrupt+0x16/0x20 cpuidle_enter_state+0xfb/0x273 cpu_startup_entry+0x15e/0x260 start_secondary+0x8a/0x90 secondary_startup_64_no_verify+0xfa/0xfb
Source: the CVE record as published by its numbering authority, via NVD and CVE.org.
The underlying weakness: Use After Free
The product reuses or references memory after it has been freed. At some point afterward, the memory may be allocated again and saved in another pointer, while the original pointer references a location somewhere within the new allocation. Any operations using the original pointer are no longer valid because the memory belongs to the code that operates on the new pointer.
How developers prevent this class of flaw
- Choose a language that provides automatic memory management.
- When freeing pointers, be sure to set them to NULL once they are freed. However, the utilization of multiple or complex data structures may lower the usefulness of this strategy.
Timeline
- CVE record published.
- CISA published its SSVC assessment (exploitation: none, automatable: no, technical impact: total).
- Record last changed materially (score, affected products, status or references).
References
Patches and release notes
- git.kernel.org/stable/c/5071beb59ee416e8ab456ac8647a4dabcda823b1
- git.kernel.org/stable/c/51e34db64f4e43c7b055ccf881b7f3e0c31bb26d
- git.kernel.org/stable/c/8459d61fbf24967839a70235165673148c7c7f17
- git.kernel.org/stable/c/997ae8da14f1639ce6fb66a063dab54031cd61b3
- git.kernel.org/stable/c/e8c526f2bdf1845bedaf6a478816a3d06fa78b8f
Other references
Recent Use After Free vulnerabilities
- 7.8 High severity
- 8.8 High severity
- 8.8 High severity
- 7.8 High severity
- 7.8 High severity
- 7.8 High severity
Spotted an error? Tell us.