
このリポジトリは、Linux 上で XFS ファイルシステムを実行しているシステムにおける RefluXFS 脆弱性 (CVE‑2026‑64600) を 検出、安全に検証、緩和するための包括的な C ユーティリティを提供します。このツールは、脆弱なカーネルをチェックし、reflink 対応の XFS マウントを特定し、任意で安全なレース誘発を試行し、必要な場合には 2 層の緩和策 (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 で再マウントします (多層防御)。-c) – システムが脆弱な場合にのみ任意のコマンド (例: id) を実行します。-m exploit)。reflink=0 で再マウントします (-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
このツールを安全な環境でテストするには、reflink=1 で作成された XFS パーティションを持つ Linux VM をセットアップできます。例:
# Create a loop device with an XFS filesystem (reflink enabled)
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 General Public License v3.0 の下でライセンスされています。詳細は LICENSE ファイルを参照してください。
Issue とプルリクエストを歓迎します。コントリビューションは同じ機能を維持し、倫理的な使用ガイドラインを遵守してください。
注意: セキュリティツールをテストする前に、必ず適切な許可を取得してください。倫理的かつ責任ある行動を心がけましょう。
| オプション | 説明 |
|---|
-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 プローブを展開し、XFS を reflink=0 で再マウントします。カーネルが脆弱かつ XFS reflink が有効な場合にのみ適用されます (--force を使用しない限り)。 |