
CVE-2026-31431 (Copy Fail) のローカル権限昇格エクスプロイトで、AF_ALG AEAD モジュールを介した Linux カーネルのページキャッシュ破壊を標的としています。PoC、検出ルール、ラボ環境のセットアップ、および許可されたセキュリティテスト用の緩和スクリプトを含みます。
██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ █████╗ ██╗██╗
██╔════╝██╔═══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔══██╗██║██║
██║ ██║ ██║██████╔╝ ╚████╔╝ █████╗ ███████║██║██║
██║ ██║ ██║██╔═══╝ ╚██╔╝ ██╔══╝ ██╔══██║██║██║
╚██████╗╚██████╔╝██║ ██║ ██║ ██║ ██║██║███████╗
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝
algif_aead ページキャッシュ破損
-yellow?style=for-the-badge&logo=linux&logoColor=black)
⚠️ 許可された使用のみ — このリポジトリは、合法的な許可の下で活動するペネトレーションテスター、セキュリティ研究者、防御者のみを対象としています。誤った使用は犯罪行為です。
Copy Fail は、2026年4月29日に公開された**ローカル権限昇格(LPE)**脆弱性で、2017年以降のカーネルを実行するほぼすべての主要なLinuxディストリビューションに影響します。
権限のないユーザー ──► AF_ALG + splice() ──► 4バイトのページキャッシュ書き込み ──► ROOT
この脆弱性は、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
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
脆弱なシステムでの期待される出力:
[!] カーネルバージョン: 5.15.0-91-generic
[!] algif_aead モジュール: ロード済み
[✗] システムは CVE-2026-31431 (Copy Fail) に対して脆弱と見られます
[*] 推奨アクション: カーネルアップデートを適用するか、algif_aead を無効化してください
パッチ適用済みシステムでの期待される出力:
[✓] カーネルバージョン: 6.1.132
[✓] システムは CVE-2026-31431 (Copy Fail) に対してパッチ適用済みと見られます
前提: 脆弱なシステム上で権限のないユーザーとしてローカルアクセスが必要です。
# Python 3.6+
python3 --version
# 必要なカーネルモジュールが存在すること
lsmod | grep algif_aead
# ターゲットバイナリが読み取り可能であること
ls -la /usr/bin/sudo
cd exploit/
# 現在の権限レベルを確認
id
# uid=1000(user) gid=1000(user) groups=1000(user)
# Copy Fail PoCを実行
python3 copyfail.py
# 権限昇格を確認
id
# uid=0(root) gid=0(root) groups=0(root)
1. カーネルバージョンを列挙
└─► uname -r / cat /proc/version
2. algif_aead がロードされているか確認
└─► lsmod | grep algif_aead
3. 低権限の足がかりを確認
└─► id / whoami
4. Copy Fail PoCを実行
└─► python3 exploit/copyfail.py
5. rootアクセスを確認
└─► id && cat /etc/shadow
6. 証拠を文書化
└─► スクリーンショット + カーネルバージョン、ディストリ、エクスプロイトハッシュを記録
7. 緩和策を適用(テスト後)
└─► sudo bash mitigation/disable_algif_aead.sh
8. ペンテストレポートに含める
└─► reports/pentest-report-template.md を使用
// detection/yara/copyfail.yar
rule CopyFail_CVE_2026_31431 {
meta:
description = "Copy Fail (CVE-2026-31431) エクスプロイトアーティファクトの検出"
author = "0xFuffM3"
date = "2026-04-30"
reference = "https://copy.fail"
strings:
$py1 = "algif_aead" ascii
$py2 = "AF_ALG" ascii
$py3 = "splice" ascii
$py4 = "page_cache" ascii
$py5 = "authencesn" ascii
condition:
3 of them
}
YARAスキャンの実行:
yara detection/yara/copyfail.yar /tmp/ -r
# detection/sigma/copyfail_lpe.yml
title: Copy Fail LPE Exploit Execution (CVE-2026-31431)
status: stable
logsource:
category: process_creation
product: linux
detection:
selection:
CommandLine|contains:
- 'AF_ALG'
- 'algif_aead'
- 'authencesn'
condition: selection
falsepositives:
- 正規の暗号APIテスト
level: high
chmod +x detection/scripts/detect_algif_aead.sh
./detection/scripts/detect_algif_aead.sh
# Ubuntu / Debian
sudo apt-get update && sudo apt-get upgrade linux-image-generic
# RHEL / CentOS
sudo yum update kernel
# Amazon Linux
sudo yum update kernel
# アップデート後、再起動
sudo reboot
algif_aead モジュールの無効化(暫定措置)# 緩和スクリプトを実行
chmod +x mitigation/disable_algif_aead.sh
sudo bash mitigation/disable_algif_aead.sh
スクリプトの内容:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || echo "[*] モジュールは現在ロードされていません"
echo "[✓] algif_aead を無効化しました。再起動して永続性を確認してください。"
mitigation/kubernetes-hardening.md を参照:
AF_ALG ソケット作成の制限socket(AF_ALG, ...) システムコールをブロックするSeccompプロファイルクライアント向けのすぐに使えるレポートテンプレートは reports/pentest-report-template.md にあります。
Finding: Copy Fail (CVE-2026-31431) によるローカル権限昇格
Severity: 高 (CVSS 7.8)
Host: 10.10.10.55 (ubuntu-prod-01)
Kernel: 5.15.0-91-generic
Evidence:
- 権限のないシェル (uid=1000) から root (uid=0) に昇格
- カーネルモジュール algif_aead がロードされていることを確認
- ディスクアーティファクトなし — ページキャッシュのみ
Recommendation:
1. ベンダーのカーネルパッチを直ちに適用
2. 暫定措置: algif_aead モジュールを無効化
3. KubernetesノードとCI/CDランナーを確認
このリポジトリのものを使用する前に必ずお読みください。
このリポジトリは、正当なセキュリティ研究、許可されたペネトレーションテスト、防御的なセキュリティ目的のためだけに公開されています。
本素材の無許可使用は、コンピュータ詐欺および濫用法(CFAA)、EU指令2013/40/EU、インドIT法2000、および管轄区域の同等の法律に違反する可能性があります。
著者は誤用に対する一切の責任を負いません。完全な法的通知は DISCLAIMER.md をご覧ください。
セキュリティ研究者の貢献を歓迎します:
git checkout -b feat/your-contributiongit commit -m "Add: detection rule for X"責任ある開示の規範に従ってください。パッチ適用済みシステムを対象とした武器化された本番向けエクスプロイトコードは含めないでください。
| # | セクション | 説明 |
|---|
| 1 | Copy Failとは? | 脆弱性概要 |
| 2 | 技術的詳細 | 根本原因分析 |
| 3 | 影響を受けるシステム | ディストリビューション&カーネルマトリックス |
| 4 | リポジトリ構造 | ファイル構成 |
| 5 | ラボ環境のセットアップ | 安全に再現する方法 |
| 6 | エクスプロイトの使い方 | ペンテストのワークフロー |
| 7 | 検知 | YARA、Sigma、スクリプト |
| 8 | 緩和策 | パッチとハードニング |
| 9 | ペンテストレポート | レポートテンプレート |
| 10 | 法的・倫理的注意 | 免責事項 |
| 11 | 参考文献 | CVE、アドバイザリ、ブログ |
| プロパティ | 詳細 |
|---|
| CVE ID | CVE-2026-31431 |
| ニックネーム | Copy Fail |
| CVSS v3.1 | 7.8 (高) |
| 攻撃ベクトル | ローカル |
| 必要な権限 | 低(任意の権限のないユーザー) |
| ユーザー操作 | 不要 |
| 発見者 | Xint Code (Theori) |
| 公開日 | 2026年4月29日 |
| エクスプロイトサイズ | 732バイト(Python PoC) |
| パッチ状況 | ✅ 利用可能 — コミット 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 | ✅ パッチ適用済み | アドバイザリ |
| ツール | 検知サポート |
|---|
| Microsoft Defender (MDVM) | ✅ あり |
| Tenable Nessus | ✅ あり |
| Qualys | ✅ あり |
| Wazuh | ✅ カスタムSigmaルール経由 |
| Palo Alto Cortex XDR | ✅ あり |
| CrowdStrike Falcon | ✅ あり |
| ソース | リンク |
|---|
| オリジナル開示 (Xint/Theori) | copy.fail |
| Xint Code技術解説 | xint.io/blog/copy-fail |
| NVDエントリ | nvd.nist.gov |
| Microsoftセキュリティブログ | microsoft.com/security/blog |
| Ubuntuアドバイザリ | ubuntu.com/blog |
| CERT-EUアドバイザリ | cert.europa.eu |
| Tenable FAQ | tenable.com/blog |
| Palo Alto Unit 42 | unit42.paloaltonetworks.com |
| CloudLinuxアドバイザリ | blog.cloudlinux.com |
| Bugcrowd分析 | bugcrowd.com/blog |
| Linuxカーネルパッチ | kernel.org — commit a664bf3d603d |