
CVE-2026-31431(Copy Fail)の概念実証エクスプロイト。algif_aeadのページキャッシュ破損を介したLinuxカーネルのLPEであり、検出、ラボ、緩和策のガイダンスを含む。
██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ █████╗ ██╗██╗
██╔════╝██╔═══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔══██╗██║██║
██║ ██║ ██║██████╔╝ ╚████╔╝ █████╗ ███████║██║██║
██║ ██║ ██║██╔═══╝ ╚██╔╝ ██╔══╝ ██╔══██║██║██║
╚██████╗╚██████╔╝██║ ██║ ██║ ██║ ██║██║███████╗
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝
algif_aead ページキャッシュ破損⚠️ 許可された使用のみ — このリポジトリは、合法的な許可の下で活動するペネトレーションテスター、セキュリティ研究者、防御者のみを対象としています。誤った使用は犯罪行為です。
| # | セクション | 説明 |
|---|---|---|
| 1 | Copy Failとは? | 脆弱性概要 |
| 2 | 技術的詳細 | 根本原因分析 |
| 3 | 影響を受けるシステム | ディストリビューション&カーネルマトリックス |
| 4 | リポジトリ構造 | ファイル構成 |
| 5 | ラボ環境のセットアップ | 安全に再現する方法 |
| 6 | エクスプロイトの使い方 | ペンテストのワークフロー |
| 7 | 検知 | YARA、Sigma、スクリプト |
| 8 | 緩和策 | パッチとハードニング |
| 9 | ペンテストレポート | レポートテンプレート |
| 10 | 法的・倫理的注意 | 免責事項 |
| 11 | 参考文献 | CVE、アドバイザリ、ブログ |
Copy Fail は、2026年4月29日に公開された**ローカル権限昇格(LPE)**脆弱性で、2017年以降のカーネルを実行するほぼすべての主要なLinuxディストリビューションに影響します。
権限のないユーザー ──► AF_ALG + splice() ──► 4バイトのページキャッシュ書き込み ──► ROOT
| プロパティ | 詳細 |
|---|---|
| CVE ID | CVE-2026-31431 |
| ニックネーム | Copy Fail |
| CVSS v3.1 | 7.8 (高) |
| 攻撃ベクトル | ローカル |
| 必要な権限 | 低(任意の権限のないユーザー) |
| ユーザー操作 | 不要 |
| 発見者 | Xint Code (Theori) |
| 公開日 | 2026年4月29日 |
| エクスプロイトサイズ | 732バイト(Python PoC) |
| パッチ状況 | ✅ 利用可能 — コミット a664bf3d603d を差し戻し |
この脆弱性は、2017年に導入された(commit 72548b093ee3)Linuxカーネルのユーザー空間暗号API(AF_ALG)の algif_aead モジュール内のバグのあるインプレース最適化に起因します。
AF_ALG (ユーザー空間暗号API)
└── algif_aead モジュール
└── authencesn テンプレート ◄── 脆弱
└── インプレース最適化 (2017)
└── req->src == req->dst ◄── splice() からのページが書き込み可能なdstスキャッターリストにチェーンされる
Step 1: AF_ALG AEADソケットを開く
socket(AF_ALG, SOCK_SEQPACKET, 0)
Step 2: ターゲットファイルを参照するsplice()ページを送信
(特権バイナリのページキャッシュページ、例: /usr/bin/sudo)
Step 3: authencesnのスクラッチ書き込みをトリガー
authencesnがdstバッファをスクラッチパッドとして使用 →
正規の出力領域を超えて4バイトの制御可能なデータを書き込む
Step 4: ターゲットファイルのページキャッシュエントリが破損する
(ディスクファイルは未変更 — メモリ上のコピーのみ改変)
Step 5: 改変されたバイナリを実行 → ROOT
Linuxカーネルのページキャッシュは、ファイルのメモリ上のコピーをバックします。ファイルが読み込まれると、そのページはキャッシュされます。splice() システムコールは、これらのキャッシュされたページを直接参照できます。ページキャッシュページをAF_ALG AEADスキャッターリストに渡すことで、authencesnのスクラッチ書き込みはそのキャッシュページ内に着地し、読み取り可能なあらゆるファイル(sudo、pkexec、passwdなどの特権バイナリを含む)のメモリ上のコピーを事実上パッチすることになります。
アップストリームの修正は、欠陥のある2017年の最適化を差し戻します:
# コミット a664bf3d603d で修正済み
git show a664bf3d603d
| カーネルブランチ | 影響あり? | 修正バージョン |
|---|---|---|
| 4.9.x (LTS) | ✅ はい | 4.9.340+ |
| 5.4.x (LTS) | ✅ はい | 5.4.295+ |
| 5.10.x (LTS) | ✅ はい | 5.10.239+ |
| 5.15.x (LTS) | ✅ はい | 5.15.185+ |
| 6.1.x (LTS) | ✅ はい | 6.1.132+ |
| 6.6.x (LTS) | ✅ はい | 6.6.83+ |
| 6.12.x (LTS) | ✅ はい | 6.12.19+ |
| < 4.9 (2017年以前) | ❌ いいえ | 該当なし — 最適化が存在しない |
| ディストリビューション | 影響を受けるバージョン | パッチ適用済み? | アドバイザリ |
|---|---|---|---|
| Ubuntu | < 26.04 (すべてのリリース) | ✅ パッチ適用済み | USN |
| Ubuntu 26.04 (Resolute) | ❌ 影響なし | — | — |
| RHEL / CentOS | 7, 8, 9 | ✅ パッチ適用済み | RHSA-2026 |
| Amazon Linux | 2, 2023 | ✅ パッチ適用済み | ALAS |
| SUSE / openSUSE | すべて影響あり | ✅ パッチ適用済み | SUSE-SU |
| Debian | Bullseye, Bookworm | ✅ パッチ適用済み | DSA |
| CloudLinux | 8, 9 | ✅ パッチ適用済み | アドバイザリ |
CVE-2026-31431-CopyFail/
│
├── 📄 README.md ← 現在地
├── 📄 LICENSE ← 研究・教育用ライセンス
├── 📄 DISCLAIMER.md ← 法的・倫理的使用ポリシー
├── 📄 CHANGELOG.md ← バージョン履歴
│
├── 📂 docs/
│ ├── vulnerability-analysis.md ← 詳細:根本原因とメカニズム
│ ├── exploitation-walkthrough.md ← ステップバイステップの方法論
│ ├── affected-kernels.md ← 完全なカーネル/ディストリバージョン表
│ ├── detection.md ← Defender、Tenable、Wazuhの対応状況
│ └── references.md ← すべてのCVE、ブログ、アドバイザリ
│
├── 📂 exploit/
│ ├── README.md ← 使用方法、前提条件、テスト済みディストリ
│ ├── copyfail.py ← 参考PoC(教育用)
│ ├── trigger.c ← AF_ALG + splice() Cトリガー
│ └── variants/
│ ├── ubuntu.py ← Ubuntu向けバリアント
│ ├── rhel.py ← RHEL/CentOS向けバリアント
│ └── amazon_linux.py ← Amazon Linux向けバリアント
│
├── 📂 detection/
│ ├── yara/
│ │ └── copyfail.yar ← エクスプロイトアーティファクト用YARAルール
│ ├── sigma/
│ │ └── copyfail_lpe.yml ← SIEM/SOC用Sigmaルール
│ └── scripts/
│ ├── check_vulnerable.sh ← カーネル脆弱性の簡易チェック
│ └── detect_algif_aead.sh ← モジュールがロード/アクティブか確認
│
├── 📂 mitigation/
│ ├── README.md ← 緩和策の概要
│ ├── disable_algif_aead.sh ← 影響を受けるカーネルモジュールを無効化
│ ├── patch-notes.md ← アップストリームパッチの詳細
│ └── kubernetes-hardening.md ← K8s / コンテナのハードニング
│
├── 📂 lab/
│ ├── Vagrantfile ← 再現可能な脆弱VM
│ ├── setup.sh ← ラブのブートストラップスクリプト
│ └── docker/
│ └── Dockerfile ← 脆弱なUbuntuコンテナ
│
├── 📂 reports/
│ ├── pentest-report-template.md ← クライアント向けレポートテンプレート
│ └── sample-finding.md ← サンプル調査報告書
│
└── 📂 assets/
├── demo.gif ← (オプション) 端末デモ
└── diagrams/
└── page-cache-write.png ← 攻撃フロー図
必ず隔離された認可環境でテストしてください。本番システムでエクスプロイトを実行しないでください。
# リポジトリをクローン
git clone https://github.com/0xFuffM3/CVE-2026-31431-CopyFail.git
cd CVE-2026-31431-CopyFail
# 脆弱なラボVMを起動
cd lab/
vagrant up
# ラボにSSH
vagrant ssh
# カーネルバージョンの確認(脆弱であるべき)
uname -r
cd lab/docker/
# 脆弱なコンテナイメージをビルド
docker build -t copyfail-lab .
# カーネル操作に必要な権限で実行
docker run --rm -it --privileged copyfail-lab /bin/bash
# 簡易チェックスクリプトを実行
chmod +x detection/scripts/check_vulnerable.sh
./detection/scripts/check_vulnerable.sh