CVE-2024-36963

tracefs: Reset permissions on remount if permissions are options

High · published June 3, 2024

CVSS v3.1
7.8
EPSS
0%
Percentile
8.2
In the wild
Unconfirmed
What it is

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

tracefs: Reset permissions on remount if permissions are options

There's an inconsistency with the way permissions are handled in tracefs.

Because the permissions are generated when accessed, they default to the

root inode's permission if they were never set by the user. If the user

sets the permissions, then a flag is set and the permissions are saved via

the inode (for tracefs files) or an internal attribute field (for

eventfs).

But if a remount happens that specify the permissions, all the files that

were not changed by the user gets updated, but the ones that were are not.

If the user were to remount the file system with a given permission, then

all files and directories within that file system should be updated.

This can cause security issues if a file's permission was updated but the

admin forgot about it. They could incorrectly think that remounting with

permissions set would update all files, but miss some.

For example:

# cd /sys/kernel/tracing

# chgrp 1002 current_tracer

# ls -l

[..]

-rw-r----- 1 root root 0 May 1 21:25 buffer_size_kb

-rw-r----- 1 root root 0 May 1 21:25 buffer_subbuf_size_kb

-r--r----- 1 root root 0 May 1 21:25 buffer_total_size_kb

-rw-r----- 1 root lkp 0 May 1 21:25 current_tracer

-rw-r----- 1 root root 0 May 1 21:25 dynamic_events

-r--r----- 1 root root 0 May 1 21:25 dyn_ftrace_total_info

-r--r----- 1 root root 0 May 1 21:25 enabled_functions

Where current_tracer now has group "lkp".

# mount -o remount,gid=1001 .

# ls -l

-rw-r----- 1 root tracing 0 May 1 21:25 buffer_size_kb

-rw-r----- 1 root tracing 0 May 1 21:25 buffer_subbuf_size_kb

-r--r----- 1 root tracing 0 May 1 21:25 buffer_total_size_kb

-rw-r----- 1 root lkp 0 May 1 21:25 current_tracer

-rw-r----- 1 root tracing 0 May 1 21:25 dynamic_events

-r--r----- 1 root tracing 0 May 1 21:25 dyn_ftrace_total_info

-r--r----- 1 root tracing 0 May 1 21:25 enabled_functions

Everything changed but the "current_tracer".

Add a new link list that keeps track of all the tracefs_inodes which has

the permission flags that tell if the file/dir should use the root inode's

permission or not. Then on remount, clear all the flags so that the

default behavior of using the root inode's permission is done for all

files and directories.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00190 · 8.2th percentile
Published
2024-06-03T07:50Z
EPSS history
Timeline
  • 03 JUN 07:50Z
    tracefs: Reset permissions on remount if permissions are options
    cvelistv5