IPBUF安全漏洞报告
English
CVE-2026-31467 CVSS 7.5 高危

CVE-2026-31467 Linux Kernel EROFS死锁漏洞

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

漏洞信息

漏洞编号
CVE-2026-31467
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelEROFS拒绝服务死锁DoS内核漏洞

漏洞概述

Linux内核EROFS文件系统存在拒绝服务漏洞。在进程上下文(如dm-verity)中,bio完成路径直接调用解压缩而非使用工作队列。此行为在内存不足时可能触发内存交换I/O,导致submit_bio_wait死锁。由于bio_list已被初始化,系统将陷入无限等待,最终导致服务不可用及系统挂起,影响系统可用性。

技术细节

该漏洞源于Linux内核EROFS子系统的bio完成路径设计缺陷。为了最小化调度延迟,系统在进程上下文(例如dm-verity环境)中直接调用解压缩函数,而不是触发另一个工作队列上下文。这种直接调用方式使用了GFP_KERNEL标志来调用vm_map_ram()。当系统处于内存不足状态时,vm_map_ram()可能会尝试生成内存交换I/O。然而,由于bio_list已经被初始化且非空,submit_bio_wait会进入等待状态。此时,交换I/O操作依赖于bio处理,而bio处理又被阻塞,从而形成一个死锁循环。这会导致系统挂起,影响可用性。官方修复方案是使用memalloc_noio_save和restore函数包装该路径,以禁止在内存分配时进行I/O回收。

攻击链分析

STEP 1
步骤1: 环境准备
攻击者诱导系统挂载特制的EROFS文件系统镜像,或等待系统处于内存不足状态。
STEP 2
步骤2: 触发内存压力
通过运行内存消耗程序或系统自然运行,耗尽空闲内存,迫使内核进行内存回收和交换。
STEP 3
步骤3: 执行I/O操作
触发对EROFS文件系统的读取操作。系统进入bio完成路径,并在进程上下文中直接调用解压缩。
STEP 4
步骤4: 触发死锁
解压缩过程中的vm_map_ram()尝试进行I/O交换,但bio_list被占用,submit_bio_wait阻塞,导致死锁。
STEP 5
步骤5: 拒绝服务
相关进程或整个系统挂起,无法响应新的请求,达成拒绝服务攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * Conceptual PoC for CVE-2026-31467 (Linux Kernel EROFS Deadlock) * This is a simulation of the trigger condition. * Actual exploitation requires specific kernel memory pressure and EROFS mount. */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> // Note: This PoC demonstrates the user-space trigger logic (memory pressure). // The actual deadlock happens in the kernel space within z_erofs_endio. void consume_memory() { size_t block_size = 1024 * 1024; // 1MB char *buf; int i = 0; printf("[+] Applying memory pressure to trigger OOM/Swap...\n"); while (1) { buf = malloc(block_size); if (buf == NULL) break; memset(buf, 0xAA, block_size); i++; if (i % 100 == 0) printf("Allocated %d MB\n", i); } printf("[-] Memory allocation stopped. Kernel may start swapping during EROFS access.\n"); } int main() { printf("CVE-2026-31467 PoC Trigger Simulation\n"); printf("Scenario: Mount EROFS image with dm-verity on low memory system.\n"); // Step 1: Consume memory to force GFP_KERNEL to trigger swap consume_memory(); // Step 2: Perform I/O on EROFS mount (Kernel space execution) // In a real exploit, this would be a read() on a file on the EROFS filesystem // causing the bio completion path to call vm_map_ram() with GFP_KERNEL. printf("[!] Triggering EROFS I/O (Simulation)...\n"); return 0; }

影响范围

Linux Kernel (修复提交前)

防御指南

临时缓解措施
限制对不可信EROFS镜像的挂载,并确保系统有充足的内存以减少内核进入内存交换状态的可能性。

参考链接

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