CVE-2023-52879·Kernel vulnerability
In the Linux kernel, the following vulnerability has been resolved: tracing: Have trace_event_file have ref counters The following can crash the kernel: # cd /sys/kernel/tracing # echo 'p:sched schedule' > kprobe_events # exec 5>>events/kprobes/sched/enable # > kprobe_events # exec 5>&- The above commands: 1. Change directory to the tracefs directory 2. Create a kprobe event (doesn't matter what one) 3. Open bash file descriptor 5 on the enable file of the kprobe event 4. Delete the kprobe event (removes the files too) 5. Close the bash file descriptor 5 The above causes a crash! BUG: kernel NULL pointer dereference, address: 0000000000000028 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 0 P4D 0 Oops: 0000 [#1] PREEMPT SMP PTI CPU: 6 PID: 877 Comm: bash Not tainted 6.5.0-rc4-test-00008-g2c6b6b1029d4-dirty #186 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014 RIP: 0010:tracing_release_file_tr+0xc/0x50 What happens here is that the kprobe event creates a trace_event_file "file" descriptor that represents the file in tracefs to the event. It maintains state of the event (is it enabled for the given instance?). Opening the "enable" file gets a reference to the event "file" descriptor via the open file descriptor. When the kprobe event is deleted, the file is also deleted from the tracefs system which also frees the event "file" descriptor. But as the tracefs file is still opened by user space, it will not be totally removed until the final dput() is called on it. But this is not true with the event "file" descriptor that is already freed. If the user does a write to or simply closes the file descriptor it will reference the event "file" descriptor that was just freed, causing a use-after-free bug. To solve this, add a ref count to the event "file" descriptor as well as a new flag called "FREED". The "file" will not be freed until the last reference is released. But the FREE flag will be set when the event is removed to prevent any more modifications to that event from happening, even if there's still a reference to the event "file" descriptor.
- Severity
- medium
- Software
- Kernel
- Fixed in
- 6.6.1
- Published
- 2024-05-21
Affected versions
From: 6.6
Until: 6.6.1
Fixed in: 6.6.1
How to fix this CVE
Update your Linux kernel to version 6.6.1 or later to resolve this use-after-free vulnerability in the tracing subsystem. The fix implements reference counting for trace event file descriptors to prevent access to freed memory when kprobe events are deleted while still being referenced by open file handles. Kernel updates should be applied promptly followed by a system reboot to activate the patched version.
sudo dnf check-update kernel && sudo dnf update kernel && sudo rebootDefensia detects this vulnerability
How to check if you are affected
- Run 'uname -r' to check your current kernel version and confirm if it is between 6.6 and 6.6.1
- Verify if kprobe tracing is enabled by checking 'cat /sys/kernel/tracing/kprobe_events' for any defined kprobe events
- Search kernel logs for NULL pointer dereference panics with 'dmesg | grep -i "NULL pointer\|tracing_release_file_tr"' to identify past exploitation attempts
- After applying the kernel update, run 'uname -r' again and confirm the version is 6.6.1 or later, then verify with 'cat /proc/version'
FAQ
What is CVE-2023-52879?
This vulnerability is a use-after-free bug in the Linux kernel's tracing subsystem where deleting a kprobe event while it still has open file handles leads to memory corruption when those handles are subsequently accessed. The issue stems from missing reference counting on trace event file descriptors.
Is CVE-2023-52879 being actively exploited?
No, CVE-2023-52879 is not listed on the CISA Known Exploited Vulnerabilities catalog and no public exploits are currently available. However, the vulnerability requires local access and can crash the kernel, making it a denial-of-service risk.
What versions of Kernel are affected by CVE-2023-52879?
Linux kernel versions 6.6 through 6.6.0 are affected. The vulnerability was resolved in kernel 6.6.1 and later stable releases.
How do I check if my server is vulnerable to CVE-2023-52879?
Run 'uname -r' to display your kernel version. If it shows a version between 6.6 and 6.6.0 (inclusive), your system is vulnerable. Systems running kernel 6.6.1 or later are patched.
Does Defensia detect CVE-2023-52879?
Yes — Defensia's CVE advisory scanner compares installed package versions against the NVD database. If Kernel is installed on a monitored server, CVE-2023-52879 will appear in your dashboard with remediation steps.
Related Kernel CVEs
References
- https://git.kernel.org/stable/c/2c9de867ca285c397cd71af703763fe416265706
- https://git.kernel.org/stable/c/2fa74d29fc1899c237d51bf9a6e132ea5c488976
- https://git.kernel.org/stable/c/9034c87d61be8cff989017740a91701ac8195a1d
- https://git.kernel.org/stable/c/961c4511c7578d6b8f39118be919016ec3db1c1e
- https://git.kernel.org/stable/c/a98172e36e5f1b3d29ad71fade2d611cfcc2fe6f
Track CVEs across your fleet automatically
Defensia scans your Linux servers and tells you exactly which ones are running vulnerable versions — including CVE-2023-52879. Free for 1 server.
Get started free