CVE-2024-47711 Information
Description
In the Linux kernel the following vulnerability has been resolved:
af_unix: Don’t return OOB skb in manage_oob().
syzbot reported use-after-free in unix_stream_recv_urg(). [0]
The scenario is
- send(MSG_OOB)
- recv(MSG_OOB) -> The consumed OOB remains in recv queue
- send(MSG_OOB)
- recv() -> manage_oob() returns the next skb of the consumed OOB -> This is also OOB but unix_sk(sk)->oob_skb is not cleared
- recv(MSG_OOB) -> unix_sk(sk)->oob_skb is used but already freed
The recent commit 8594d9b85c07 (f_unix: Don’t call skb_get() for OOB skb.) uncovered the issue.
If the OOB skb is consumed and the next skb is peeked in manage_oob() we still need to check if the skb is OOB.
Let’s do so by falling back to the following checks in manage_oob() and add the test case in selftest.
Note that we need to add a similar check for SIOCATMARK.
[0]: BUG: KASAN: slab-use-after-free in unix_stream_read_actor+0xa6/0xb0 net/unix/af_unix.c:2959 Read of size 4 at addr ffff8880326abcc4 by task syz-executor178/5235
CPU: 0 UID: 0 PID: 5235 Comm: syz-executor178 Not tainted 6.11.0-rc5-syzkaller-00742-gfbdaffe41adc 0
Hardware name: Google Google Compute Engine/Google Compute Engine BIOS Google 08/06/2024
Call Trace:
Allocated by task 5235: kasan_save_stack mm/kasan/common.c:47 [inline] kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 unpoison_slab_object mm/kasan/common.c:312 [inline] __kasan_slab_alloc+0x66/0x80 mm/kasan/common.c:338 kasan_slab_alloc include/linux/kasan.h:201 [inline] slab_post_alloc_hook mm/slub.c:3988 [inline] slab_alloc_node mm/slub.c:4037 [inline] kmem_cache_alloc_node_noprof+0x16b/0x320 mm/slub.c:4080 __alloc_skb+0x1c3/0x440 net/core/skbuff.c:667 alloc_skb include/linux/skbuff.h:1320 [inline] alloc_skb_with_frags+0xc3/0x770 net/core/skbuff.c:6528 sock_alloc_send_pskb+0x91a/0xa60 net/core/sock.c:2815 sock_alloc_send_skb include/net/sock.h:1778 [inline] queue_oob+0x108/0x680 net/unix/af_unix.c:2198 unix_stream_sendmsg+0xd24/0xf80 net/unix/af_unix.c:2351 sock_sendmsg_nosec net/socket.c:730 [inline] __sock_sendmsg+0x221/0x270 net/socket.c:745 ____sys_sendmsg+0x525/0x7d0 net/socket.c:2597 ___sys_sendmsg net/socket.c:2651 [inline] __sys_sendmsg+0x2b0/0x3a0 net/socket.c:2680 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x77/0x7f
Freed by task 5235: kasan_save_stack mm/kasan/common.c:47
truncated—
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Reference
https://git.kernel.org/stable/c/4a7f9a2591a923bdde4bd7eac33490b6ae3b257c https://git.kernel.org/stable/c/5aa57d9f2d5311f19434d95b2a81610aa263e23b
Attack Complexity
LOW
Privileges Required
LOW
User Interaction Required
LOW
Scope
NONE
Confidentiality Impact
UNCHANGED
Integrity Impact
HIGH
Availability Impact
HIGH
Base Score
HIGH
Base Severity
7.8
Share on: