CVE-2023-52885

Source
https://cve.org/CVERecord?id=CVE-2023-52885
Import Source
https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2023-52885.json
JSON Data
https://api.test.osv.dev/v1/vulns/CVE-2023-52885
Downstream
Related
Published
2024-07-14T07:11:28.548Z
Modified
2026-04-11T12:46:38.373651Z
Summary
SUNRPC: Fix UAF in svc_tcp_listen_data_ready()
Details

In the Linux kernel, the following vulnerability has been resolved:

SUNRPC: Fix UAF in svctcplistendataready()

After the listener svcsock is freed, and before invoking svctcpaccept() for the established child sock, there is a window that the newsock retaining a freed listener svcsock in skuserdata which cloning from parent. In the race window, if data is received on the newsock, we will observe use-after-free report in svctcplistendataready().

Reproduce by two tasks:

  1. while :; do rpc.nfsd 0 ; rpc.nfsd; done
  2. while :; do echo "" | ncat -4 127.0.0.1 2049 ; done

KASAN report:

================================================================== BUG: KASAN: slab-use-after-free in svctcplistendataready+0x1cf/0x1f0 [sunrpc] Read of size 8 at addr ffff888139d96228 by task nc/102553 CPU: 7 PID: 102553 Comm: nc Not tainted 6.3.0+ #18 Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 11/12/2020 Call Trace: <IRQ> dumpstacklvl+0x33/0x50 printaddressdescription.constprop.0+0x27/0x310 printreport+0x3e/0x70 kasanreport+0xae/0xe0 svctcplistendataready+0x1cf/0x1f0 [sunrpc] tcpdataqueue+0x9f4/0x20e0 tcprcvestablished+0x666/0x1f60 tcpv4dorcv+0x51c/0x850 tcpv4rcv+0x23fc/0x2e80 ipprotocoldeliverrcu+0x62/0x300 iplocaldeliverfinish+0x267/0x350 iplocaldeliver+0x18b/0x2d0 iprcv+0x2fb/0x370 __netifreceiveskb_onecore+0x166/0x1b0 processbacklog+0x24c/0x5e0 __napipoll+0xa2/0x500 netrx_action+0x854/0xc90 __dosoftirq+0x1bb/0x5de dosoftirq+0xcb/0x100 </IRQ> <TASK> ... </TASK>

Allocated by task 102371: kasansavestack+0x1e/0x40 kasansettrack+0x21/0x30 __kasankmalloc+0x7b/0x90 svcsetupsocket+0x52/0x4f0 [sunrpc] svcaddsock+0x20d/0x400 [sunrpc] _writeportsaddfd+0x209/0x390 [nfsd] writeports+0x239/0x2c0 [nfsd] nfsctltransactionwrite+0xac/0x110 [nfsd] vfswrite+0x1c3/0xae0 ksyswrite+0xed/0x1c0 dosyscall64+0x38/0x90 entrySYSCALL64afterhwframe+0x72/0xdc

Freed by task 102551: kasansavestack+0x1e/0x40 kasansettrack+0x21/0x30 kasansavefree_info+0x2a/0x50 __kasanslabfree+0x106/0x190 __kmemcachefree+0x133/0x270 svcxprtfree+0x1e2/0x350 [sunrpc] svcxprtdestroyall+0x25a/0x440 [sunrpc] nfsdput+0x125/0x240 [nfsd] nfsdsvc+0x2cb/0x3c0 [nfsd] writethreads+0x1ac/0x2a0 [nfsd] nfsctltransactionwrite+0xac/0x110 [nfsd] vfswrite+0x1c3/0xae0 ksyswrite+0xed/0x1c0 dosyscall64+0x38/0x90 entrySYSCALL64afterhwframe+0x72/0xdc

Fix the UAF by simply doing nothing in svctcplistendataready() if state != TCP_LISTEN, that will avoid dereferencing svsk for all child socket.

Database specific
{
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2023/52xxx/CVE-2023-52885.json",
    "cna_assigner": "Linux"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
fa9251afc33c81606d70cfe91800a779096442ec
Fixed
c7b8c2d06e437639694abe76978e915cfb73f428
Fixed
dfc896c4a75cb8cd7cb2dfd9b469cf1e3f004254
Fixed
42725e5c1b181b757ba11d804443922982334d9b
Fixed
cd5ec3ee52ce4b7e283cc11facfa420c297c8065
Fixed
fbf4ace39b2e4f3833236afbb2336edbafd75eee
Fixed
ef047411887ff0845afd642d6a687819308e1a4e
Fixed
7e1f989055622fd086c5dfb291fc72adf5660b6f
Fixed
fc80fc2d4e39137869da3150ee169b40bf879287

Database specific

source
"https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2023-52885.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
4.8.0
Fixed
4.14.322
Type
ECOSYSTEM
Events
Introduced
4.15.0
Fixed
4.19.291
Type
ECOSYSTEM
Events
Introduced
4.20.0
Fixed
5.4.251
Type
ECOSYSTEM
Events
Introduced
5.5.0
Fixed
5.10.188
Type
ECOSYSTEM
Events
Introduced
5.11.0
Fixed
5.15.121
Type
ECOSYSTEM
Events
Introduced
5.16.0
Fixed
6.1.39
Type
ECOSYSTEM
Events
Introduced
6.2.0
Fixed
6.4.4

Database specific

source
"https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2023-52885.json"