本仓库提供了一个全面的 C 语言工具,用于在运行 XFS 文件系统的 Linux 系统上检测、安全验证和缓解 RefluXFS 漏洞(CVE‑2026‑64600)。该工具检查易受攻击的内核、识别启用了 reflink 的 XFS 挂载点、可选地尝试安全的竞态触发,并在需要时部署两层缓解措施(SystemTap 探针 + 使用 reflink=0 重新挂载)。
⚠️ 免责声明: 本工具仅用于授权的安全评估和系统加固。请仅在您拥有或获得明确测试许可的系统上使用。作者不对滥用行为承担任何责任。
CVE-2026-64600 (RefluXFS) 是 Linux 内核 XFS 文件系统中的一种高严重性竞态条件,具体存在于 reflink 文件的写时复制(CoW)路径中(在内核 4.11 中引入)。非特权本地攻击者可以通过在 reflink 克隆上对受保护文件进行并发的 O_DIRECT 写入竞态,从而破坏或覆盖同一 XFS 卷上的任意文件。该破坏发生在块层,重启后仍然存在,并且在内核日志中不留痕迹。
受影响的内核: Linux 4.11 至以下修复版本:
影响: 本地权限提升至 root、持久性数据损坏、静默覆盖 setuid 二进制文件或敏感文件。
该工具实现了:
/proc/mounts)。-m fix 时):
FICLONE 和 copy_file_range 系统调用,返回 -EOPNOTSUPP。reflink=0 重新挂载 XFS 卷(纵深防御)。-c)– 仅在系统易受攻击时运行任意命令(例如 id)。-m exploit)。reflink=0 重新挂载 XFS(-m fix,需要 root 权限)。--dry-run – 预览缓解操作而不实际应用。--force – 即使条件不满足也强制部署缓解(实验室/演示)。-v)– 展示详细解析信息。-c)– 仅在系统易受攻击时执行命令(默认:id)。git clone https://github.com/Debajyoti0-0/CVE-2026-64600.git
cd cve-2026-64600
gcc -o cve-2026-64600 cve-2026-64600.c -lm -lpthread
前提条件:
-m fix):
stap 命令)– 可选,但建议用于完整缓解。可选: 如果 SystemTap 不可用,工具将仅回退到重新挂载加固(如果 XFS 版本支持)。
./cve-2026-64600
./cve-2026-64600 -v
./cve-2026-64600 -p /mnt/data
./cve-2026-64600 -m exploit
./cve-2026-64600 -m auto
sudo ./cve-2026-64600 -m fix
sudo ./cve-2026-64600 -m fix --dry-run
sudo ./cve-2026-64600 -m fix --force
./cve-2026-64600 -c "whoami"
./cve-2026-64600 -v -c "id"
$ ./cve-2026-64600
┌──────────────────────────────────────────────────────────────────────┐
│ CVE-2026-64600 (RefluXFS) — Mode: check │
└──────────────────────────────────────────────────────────────────────┘
─── System Information ───
Kernel 5.15.0-91-generic
Architecture x86_64
─── Vulnerability Assessment ───
Kernel Vulnerable NO
XFS Reflink (any mount) DISABLED
Distribution Affected (heuristic) NO
────────────────────────────────────────────────────────────────────
FINAL VERDICT
────────────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────────────────┐
│ SAFE: kernel not vulnerable and no XFS reflink found │
└──────────────────────────────────────────────────────────────────────┘
Kernel: 5.15.0-91-generic (not vulnerable)
XFS reflink: not detected
System appears secure against CVE-2026-64600
────────────────────────────────────────────────────────────────────
$ ./cve-2026-64600
┌──────────────────────────────────────────────────────────────────────┐
│ CVE-2026-64600 (RefluXFS) — Mode: check │
└──────────────────────────────────────────────────────────────────────┘
─── System Information ───
Kernel 6.12.0-rc2
Architecture x86_64
─── Vulnerability Assessment ───
Kernel Vulnerable YES
XFS Reflink (any mount) DISABLED
Distribution Affected (heuristic) YES
A vulnerable kernel was detected. Show remediation advisory? [y/n]: n
────────────────────────────────────────────────────────────────────
FINAL VERDICT
────────────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────────────────┐
│ PARTIAL: vulnerable kernel, but no XFS reflink found │
└──────────────────────────────────────────────────────────────────────┘
Kernel: 6.12.0-rc2 (vulnerable)
XFS reflink: not detected
Recommendation: still consider kernel update as precaution
────────────────────────────────────────────────────────────────────
$ sudo ./cve-2026-64600 -m fix
┌──────────────────────────────────────────────────────────────────────┐
│ CVE-2026-64600 (RefluXFS) — Mode: fix │
└──────────────────────────────────────────────────────────────────────┘
─── System Information ───
Kernel 6.12.0-rc2
Architecture x86_64
─── Vulnerability Assessment ───
Kernel Vulnerable YES
XFS Reflink (any mount) ENABLED
Distribution Affected (heuristic) YES
--- Mitigation Deployment ---
Layer 2/2: mount-level hardening (remount reflink=0)
Remounted /mnt/xfs with reflink=0
Layer 1/2: syscall-level block (SystemTap probe)
Status DEPLOYED (SystemTap)
Log: /var/log/refluxfs-block.log
Stop: sudo pkill -f 'stap.*refluxfs-block'
Verify: cp --reflink=always /etc/passwd /tmp/test 2>&1 | grep -q 'Operation not supported'
Status MITIGATION ACTIVE (both layers)
--- FINAL VERDICT ---
┌──────────────────────────────────────────────────────────────────────┐
│ CONFIRMED VULNERABLE (race triggered) │
└──────────────────────────────────────────────────────────────────────┘
Kernel: 6.12.0-rc2 (vulnerable)
XFS reflink: enabled
Distribution: affected
为了在安全环境中测试此工具,您可以设置一个 Linux 虚拟机,并创建一个使用 reflink=1 的 XFS 分区。例如:
# 使用 XFS 文件系统创建循环设备(启用 reflink)
dd if=/dev/zero of=/tmp/xfs.img bs=1M count=1024
mkfs.xfs -m reflink=1 /tmp/xfs.img
sudo mount -o loop /tmp/xfs.img /mnt/xfs
然后在挂载的路径上运行工具(-p /mnt/xfs)以测试检测和缓解功能。
本项目采用 GNU 通用公共许可证 v3.0 授权 – 详情请参阅 LICENSE 文件。
欢迎提交 Issue 和 Pull Request。请确保您的贡献保持相同的功能,并遵守道德使用准则。
请记住: 在测试任何安全工具之前,始终获得适当的授权。保持道德和责任感。
| 选项 | 描述 |
|---|
-h, --help | 显示帮助信息并退出。 |
-v, --verbose | 详细输出(显示解析的内核版本细节)。 |
-p <path> | 检查特定挂载点上的 XFS reflink 状态。 |
-m, --mode <mode> | 运行模式:check(默认)、exploit、auto、fix。 |
-c, --cmd <command> | 仅在系统易受攻击时执行自定义命令(默认:id)。 |
--dry-run | 预览缓解操作(与 -m fix 一起使用)而不应用。 |
--force | 即使条件不满足也强制部署缓解(实验室/演示)。 |
| 模式 | 描述 |
|---|
check | 被动检测 – 报告内核版本、XFS reflink 状态和发行版启发式信息。不执行任何操作。 |
exploit | 即使系统不脆弱也运行安全竞态验证(PoC)。不应用缓解。 |
auto | 如果系统易受攻击,则运行安全竞态验证;否则仅检查。 |
fix | 应用分层缓解(需要 root 权限)。部署 SystemTap 探针并尝试以 reflink=0 重新挂载 XFS。仅在内核易受攻击且 XFS reflink 已启用时应用(除非使用 --force)。 |