CVE-2023-52572
Severity CVSS v4.0:
Pending analysis
Type:
CWE-416
Use After Free
Publication date:
02/03/2024
Last modified:
02/05/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
cifs: Fix UAF in cifs_demultiplex_thread()<br />
<br />
There is a UAF when xfstests on cifs:<br />
<br />
BUG: KASAN: use-after-free in smb2_is_network_name_deleted+0x27/0x160<br />
Read of size 4 at addr ffff88810103fc08 by task cifsd/923<br />
<br />
CPU: 1 PID: 923 Comm: cifsd Not tainted 6.1.0-rc4+ #45<br />
...<br />
Call Trace:<br />
<br />
dump_stack_lvl+0x34/0x44<br />
print_report+0x171/0x472<br />
kasan_report+0xad/0x130<br />
kasan_check_range+0x145/0x1a0<br />
smb2_is_network_name_deleted+0x27/0x160<br />
cifs_demultiplex_thread.cold+0x172/0x5a4<br />
kthread+0x165/0x1a0<br />
ret_from_fork+0x1f/0x30<br />
<br />
<br />
Allocated by task 923:<br />
kasan_save_stack+0x1e/0x40<br />
kasan_set_track+0x21/0x30<br />
__kasan_slab_alloc+0x54/0x60<br />
kmem_cache_alloc+0x147/0x320<br />
mempool_alloc+0xe1/0x260<br />
cifs_small_buf_get+0x24/0x60<br />
allocate_buffers+0xa1/0x1c0<br />
cifs_demultiplex_thread+0x199/0x10d0<br />
kthread+0x165/0x1a0<br />
ret_from_fork+0x1f/0x30<br />
<br />
Freed by task 921:<br />
kasan_save_stack+0x1e/0x40<br />
kasan_set_track+0x21/0x30<br />
kasan_save_free_info+0x2a/0x40<br />
____kasan_slab_free+0x143/0x1b0<br />
kmem_cache_free+0xe3/0x4d0<br />
cifs_small_buf_release+0x29/0x90<br />
SMB2_negotiate+0x8b7/0x1c60<br />
smb2_negotiate+0x51/0x70<br />
cifs_negotiate_protocol+0xf0/0x160<br />
cifs_get_smb_ses+0x5fa/0x13c0<br />
mount_get_conns+0x7a/0x750<br />
cifs_mount+0x103/0xd00<br />
cifs_smb3_do_mount+0x1dd/0xcb0<br />
smb3_get_tree+0x1d5/0x300<br />
vfs_get_tree+0x41/0xf0<br />
path_mount+0x9b3/0xdd0<br />
__x64_sys_mount+0x190/0x1d0<br />
do_syscall_64+0x35/0x80<br />
entry_SYSCALL_64_after_hwframe+0x46/0xb0<br />
<br />
The UAF is because:<br />
<br />
mount(pid: 921) | cifsd(pid: 923)<br />
-------------------------------|-------------------------------<br />
| cifs_demultiplex_thread<br />
SMB2_negotiate |<br />
cifs_send_recv |<br />
compound_send_recv |<br />
smb_send_rqst |<br />
wait_for_response |<br />
wait_event_state [1] |<br />
| standard_receive3<br />
| cifs_handle_standard<br />
| handle_mid<br />
| mid->resp_buf = buf; [2]<br />
| dequeue_mid [3]<br />
KILL the process [4] |<br />
resp_iov[i].iov_base = buf |<br />
free_rsp_buf [5] |<br />
| is_network_name_deleted [6]<br />
| callback<br />
<br />
1. After send request to server, wait the response until<br />
mid->mid_state != SUBMITTED;<br />
2. Receive response from server, and set it to mid;<br />
3. Set the mid state to RECEIVED;<br />
4. Kill the process, the mid state already RECEIVED, get 0;<br />
5. Handle and release the negotiate response;<br />
6. UAF.<br />
<br />
It can be easily reproduce with add some delay in [3] - [6].<br />
<br />
Only sync call has the problem since async call&#39;s callback is<br />
executed in cifsd process.<br />
<br />
Add an extra state to mark the mid state to READY before wakeup the<br />
waitter, then it can get the resp safely.
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:*:*:*:*:*:*:*:* | 2.6.16 (including) | 6.1.56 (excluding) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (including) | 6.5.6 (excluding) |
cpe:2.3:o:linux:linux_kernel:6.6:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.6:rc2:*:*:*:*:*:* |
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/76569e3819e0bb59fc19b1b8688b017e627c268a
- https://git.kernel.org/stable/c/908b3b5e97d25e879de3d1f172a255665491c2c3
- https://git.kernel.org/stable/c/99960d282fba6634fa758df4124cb73ef8a77d8a
- https://git.kernel.org/stable/c/d527f51331cace562393a8038d870b3e9916686f
- https://git.kernel.org/stable/c/ed3b36f351d97dacb62cd0f399e8cf79f73bd30a
- https://git.kernel.org/stable/c/76569e3819e0bb59fc19b1b8688b017e627c268a
- https://git.kernel.org/stable/c/908b3b5e97d25e879de3d1f172a255665491c2c3
- https://git.kernel.org/stable/c/d527f51331cace562393a8038d870b3e9916686f