
教育目的のみ。明示的な許可なしにシステムで使用しないでください。
| フィールド | 値 |
|---|---|
| CVE | CVE-2026-31431 |
| Alias | Copy Fail |
| CVSS | 7.8 (High) |
| タイプ | Local Privilege Escalation (LPE) |
| 影響を受けるカーネル | 2017 – 2026 (commit 72548b093ee3 以降) |
| 上流の修正 | commit a664bf3d603d(2017年のリバート) |
| 開示日 | 2026年4月29日(Theori / Xint Code) |
Copy Fail は、Linux カーネルの暗号サブシステムにおける 決定論的(レース条件不要)な論理バグです。特権のないユーザーが、su や sudo などの setuid バイナリを含む、システム上の任意の読み取り可能ファイルの ページキャッシュ に、制御された4バイトを書き込むことを可能にします。
類似の過去の脆弱性と比較して:
Linux kernel — crypto/authencesn.c
└── algif_aead (AF_ALG モジュール)
└── インプレース最適化 (commit 72548b093ee3, 2017)
└── AEAD スクラッチ書き込み → scatterlist 境界を越える
└── 外部ファイルのページキャッシュに4バイト書き込み
影響を受けるディストリビューション: Ubuntu, Debian, RHEL, Amazon Linux, SUSE, Fedora, Arch, AlmaLinux — カーネルが 2017 年以降のあらゆるディストリビューション。
2017 年に導入された最適化により、req->src と req->dst が同一の結合 scatterlist を指すようになりました。これにより、splice() から取得したページキャッシュのページが、直接 書き込み可能な 宛先 scatterlist に連結されます。
1. authencesn アルゴリズムで AF_ALG ソケットを開く
2. splice() を使用してターゲットバイナリ(例:/usr/bin/sudo)のページキャッシュページを
AF_ALG ソケットに供給する
3. AEAD 復号操作を実行する
4. authencesn は宛先バッファをスクラッチパッドとして使用 →
seqno_hi(制御された4バイト)を正当な出力の外に書き込み、
scatterlist の境界を越える
5. その4バイトはターゲットバイナリのページキャッシュページに到達する
6. ディスク上のファイルは変更されない → 整合性チェックは検出しない
7. メモリ内で修正されたバイナリがペイロードを実行 → root 権限取得
書き込みは通常の VFS 書き込みパスをバイパス します。ディスク上のファイルはそのまま残ります。sha256sum、aide、tripwire、inotify などのツールは、ディスク上のファイルや inode に対して動作し、メモリ内のページキャッシュに対しては動作しないため、変更を検出しません。
このラボでは、ページキャッシュの破壊を実証するために脆弱なカーネルを使用します。Docker 環境では、完全な権限昇格はホストの設定(共有カーネル)に依存します。
# リポジトリをクローン
cd cve-2026-31431
# 脆弱なイメージをビルド
docker build -t copyfail-lab -f docker/Dockerfile.vulnerable .
# ラボを実行
docker run --rm -it \
--cap-add=NET_ADMIN \
--security-opt seccomp=unconfined \
copyfail-lab bash
# コンテナ内:
cd /lab
python3 exploit/poc.py
os.splice 用)exploit/poc.py および exploit/README.md を参照してください。
PoC は以下を実証します:
詳細な手順は mitigation/README.md を参照してください。
TL;DR — 即時緩和策(再起動不要):
# 影響を受けるモジュールを無効化
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo modprobe -r algif_aead 2>/dev/null || true
恒久修正: カーネルをパッチ適用済みバージョン(a664bf3d603d 以降)に更新してください。
cve-2026-31431/
├── README.md ← このファイル
├── docs/
│ ├── technical-analysis.md ← 詳細な技術分析
│ └── affected-kernels.md ← 影響を受ける/パッチ済みバージョンの表
├── exploit/
│ ├── README.md ← PoC のドキュメント
│ └── poc.py ← 概念実証(Python 3.10+)
├── mitigation/
│ ├── README.md ← 緩和策ガイド
│ ├── disable-algif.conf ← modprobe 設定
│ └── check-vulnerable.sh ← 検出スクリプト
├── docker/
│ ├── Dockerfile.vulnerable ← 脆弱なラボ
│ └── Dockerfile.patched ← 緩和策適用済みラボ
└── scripts/
└── setup-lab.sh ← ラボの自動セットアップ
| 脆弱性 | タイプ | レース条件必要? | 移植性? | エクスプロイトサイズ |
|---|
| Dirty Cow (CVE-2016-5195) | CoW レース | はい | 部分的 | ~KB |
| Dirty Pipe (CVE-2022-0847) | パイプバッファ | いいえ | 制限あり | ~KB |
| Copy Fail (CVE-2026-31431) | 論理的 | いいえ | 完全 | 732 bytes |
| 日付 | イベント |
|---|
| 2017 | commit 72548b093ee3 によりカーネルにバグが導入される |
| ~2025 | Theori/Xint Code が暗号サブシステムの分析を開始 |
| 2026年4月28日 | ベンダーとの調整 |
| 2026年4月29日 | 公開開示 + PoC 公開 |
| 2026年5月1日 | パッチ適用済みカーネルがプロダクションリポジトリで利用可能に |
| 2026年5月1日 | CISA KEV カタログに追加 |