
最近発見されたQualysのバグ(COWとXFS関連)のPOC
このリポジトリには、優れた Qualys セキュリティチームによって報告された、XFS の COW に影響する最近発見された競合状態の脆弱性の PoC が含まれています。[1] [2]
Qualys のアドバイザリにある優れた分析に基づいて手書きで作成されたものです。/etc/passwd ファイルの最初の 4KB を、それが元々含んでいた内容で書き換え、root ユーザーの行 root:x:0:0:root:/root:/bin/bash を root::0:0:root:/root:/bin/bash に置き換えます。差分に気づきましたか?これで root ユーザーにはパスワードがなくなり、su - を実行するだけで済みます。
自分のニーズのために作った雑な PoC なので、エラーハンドリングは粗末で、元のファイルなどの凝ったバックアップは行いません。2026年2月のカーネルを搭載した Rocky Linux 9.7 仮想マシンで、XFS / マウント上でテストしました。また、/etc/passwd への書き込みを雑にパディングするため、実行するマシンを気にかけているなら...実行前にファイルのバックアップを取ってください。この PoC は自分のマシンを確認するために作り、しばらく公開を控えるつもりでしたが、昨日別の PoC が公開されるのを見たので...
もし /home が /etc/passwd とは異なるパーティションにある場合、PoC 内の CLONE_FILE 変数を、書き込めるパスを指すように調整する必要があるかもしれません。/var/tmp が役立つかもしれません。書き込み可能な場所を確認するには find / -writable を使うとよいでしょう。gcc refluxfs.c -o refluxfs -lpthread でコンパイルします。
この PoC はログや dmesg に痕跡を残しません。個人的には、これを検出する最善の方法は、XFS ファイルシステム上の FICLONE を使った ioctl 呼び出しを監視する SIEM ルールを設定することだと思います。ファイル整合性監視ツールもこれを検出できる可能性があります。
可能ならカーネルを更新してください。あるいは、SystemTap を使用する Red Hat の緩和策が有効です:
probe begin {
printf("refluxfs mitigation loaded\n")
}
probe module("xfs").function("xfs_file_remap_range").call {
$remap_flags = 0xffff
}
probe module("xfs").function("xfs_file_remap_range").return {
$return = -95
}
probe end {
printf("refluxfs mitigation unloaded\n")
}
$ xfs_info / | grep reflink=1 と mount -l | grep xfs で確認してください。XFS コードのバグにより、ファイルに対して Copy-On-Write を要求しても、COW が適切に元に戻されません。コピーしたファイルに書き込むと、COW は元に戻され、ディスク上には2つの異なるファイルが存在するはずです。スレッドを使えば、競合状態のため、ただ... 両方のファイルに同時に書き込むことができます。
ターゲットファイルを読み取れ、ioctl(fd, FICLONE) を実行できれば、COW が有効なコピーを入手できます。同じパーティション内にある必要があります。

その後、ただ... write() をコピーに対して O_DIRECT で実行し、元のファイルを変更できます。

1: https://openwall.com/lists/oss-security/2026/07/22/14
私の記事にはおそらく間違いがあるでしょうが、特にこの 素晴らしい 数か月間、どこかから始めたかったのです。
「平穏な時代の犬である方が、混乱の時代の人間であるよりましだ。」
- 馮夢龍『醒世恒言』