(原名 RefluXFS 或 CVE-2026-64600)
该名称描述了其机制:
然而,官方致谢归属于 Qualys 及其 RefluXFS(CVE-2026-64600),通过 oss-security 披露。COWSlip 是根据合入 xfs for-next 分支的补丁独立构造的。Qualys 的 RefluXFS 早一周被发现,并作为 null-day 修复。
COWSlip 是一个 one-day PoC,基于 Red Hat 公告 RHBA-2026:39332 中发布的 XFS 修复,该公告(最初)被标记为 [Exploits (KEV)]。
在检查 kernel.spec 和 SRPM diff 后,在 XFS Linux for-next 分支中找到了对应的补丁:
xfs: resample the data fork mapping after cycling ILOCK
时间点值得注意:该修复在相应变更合入开发分支后不久便出现在企业内核更新中。简而言之,该补丁修复了 XFS 中的一个本地提权原语。可利用性取决于文件系统布局和 setuid 配置;对于使用 XFS 作为根文件系统的 RHEL 系列安装尤其相关。
PoC 针对的是修复前的 XFS 内核,需启用 reflink、存在一个 root 所有的 setuid ELF 目标(默认为 /usr/bin/su),以及同一 XFS 文件系统上一个用户可写的克隆目录。默认情况下,目标为 /usr/bin/su,克隆目录为 /tmp/cowslip-clones,因此 /tmp 必须位于该 XFS 文件系统上。它让对齐的直接 I/O CoW 写入与 reflink 克隆竞争,在被竞争的首个块中替换目标的 ELF 解释器路径,并在 setuid 目标执行加载器时启动 /bin/bash -p。
构建:
gcc -O2 -Wall -Wextra -pthread poc.c -o /tmp/cowslip
gcc -nostdlib -static-pie -s -Wl,-e,_start -o /tmp/cowslip-loader loader.S
较旧的 EL8 内核路径需要 static-PIE 加载器;之前的 ET_EXEC 加载器可能在启动 shell 前发生段错误。
以非特权用户运行,目标与克隆目录需位于同一启用 reflink 的 XFS 文件系统上:
/tmp/cowslip
可选控制项为 POC_TARGET、POC_TRIES 和 POC_THREADS:
POC_TARGET=/usr/bin/su POC_TRIES=20000 POC_THREADS=32 /tmp/cowslip
该 PoC 在命中后有意不恢复目标。从普通 root 登录,重新安装所属软件包并验证:
dnf -y reinstall util-linux || yum -y reinstall util-linux
rpm -V util-linux
rpm -V 结果为空表示软件包文件与已安装的软件包数据库一致。
已测试内核:
6.12.0-211.33.1.el10_2:命中5.14.0-687.25.1.el9_8:命中5.14.0-687.26.1.el9_8:未命中;该内核包含 XFS 修复4.18.0-553.143.1.el8_10:命中4.18.0-553.144.1.el8_10:未命中;该内核包含 XFS 修复修复:xfs: resample the data fork mapping after cycling ILOCK
由 v4.11 中的 3c68d44a2b49a0 引入;在应用重采样修复之前一直受影响。
触发条件需要:一个启用 reflink 的 XFS 文件系统、该文件系统上一个 root 所有的 setuid ELF 目标,以及同一文件系统上一个非特权用户可写的目录。