
Copy-Fail-CVE-2026-31431-Lab — Updated!
ファイルレスLPE CVE‑2026‑31431(“Copy Fail”)をKali Linux上で再現し、ディスクに痕跡を残さないこのステルスなカーネルエクスプロイトを検知するためのauditd、Sigma & YARA検出ルールを構築しました。
Copy Fail(CVE-2026-31431)— エクスプロイト再現&検出ラボ
このリポジトリは、カーネル 4.14〜7.0-rc に影響する重大な Linux カーネルローカル権限昇格脆弱性である CVE-2026-31431("Copy Fail") に関する、エンドツーエンドの再現、検出エンジニアリング、インシデントレスポンスを文書化したものです。
主な発見
- ✅ Kali Linux 2026.1(カーネル 6.18.12+kali-amd64)で CVE-2026-31431 の悪用に成功
- ✅ auditd のシステムコールレベル検出ルールを展開
- ✅ クロスプラットフォーム検出用の Sigma および YARA ルールを作成
- ✅ 完全なインシデントレスポンスプレイブックを作成
これが重要な理由
Copy Fail はメモリ破損ではなくロジック欠陥です。決定論的であり、2017年以降に出荷された実質的にすべての Linux ディストリビューションに影響し、完全にファイルレスです。従来のファイル整合性監視(AIDE、Tripwire)では検知できません。動作する概念実証はわずか Python 732バイト に収まります。
ラボ環境
| コンポーネント | 詳細 |
|---|---|
| ハイパーバイザー | VirtualBox |
| ターゲットVM | Kali Linux 2026.1 |
| カーネル | 6.18.12+kali-amd64 |
| エクスプロイトPoC | theori-io/copy-fail-CVE-2026-31431 |
| 検出 | auditd、Sigma、YARA |
再現手順
1. Kaliのバージョンとカーネルを確認
ラボは、ターゲットが脆弱なカーネルを実行していることを確認することから始まります。
Kali Linux 2026.1 リリースとカーネルの詳細。
脆弱なカーネル 6.18.12+kali-amd64 を示す uname -r の出力。
2. 脆弱なモジュールを確認
このエクスプロイトには、algif_aead カーネルモジュールと authencesn 暗号テンプレートが必要です。
モジュール読み込み
lsmod と modinfo が algif_aead が利用可能であることを確認。/proc/crypto に脆弱な authencesn テンプレートが表示されます。
3. Pythonのバージョン
PoC は Python 3.10+ を必要とする os.splice を使用します。インタープリターを確認します。
Pythonバージョン Python 3.12 がインストールされており、使用可能です。
4. 脆弱性チェッカー(非破壊)
本格的なエクスプロイトを実行する前に、安全なチェッカーがシステムの脆弱性を確認します。
チェッカーは "potentially vulnerable" と報告し、悪用への道を開きます。
5. 非特権ユーザーを作成
特別な権限を持たない攻撃者をシミュレートするため、非特権の testuser アカウントを作成します。
id が UID 1001 を示し、root 以外のアクセスであることを確認します。
6. エクスプロイトをクローンして実行
公式の Theori PoC をクローンし、非特権アカウントから実行します。
エクスプロイトリポジトリのクローンに成功しました。
エクスプロイト実行
Python エクスプロイトがページキャッシュを上書きし、破損した /usr/bin/su バイナリを起動します。
whoami と id の出力が完全な root 権限昇格を証明します。
7. ファイルレスの性質を確認(ディスクへの変更なし)
このエクスプロイトはメモリ内のページキャッシュのみを破損させます。ディスク上の /usr/bin/su は元のチェックサムを維持します。
SHA256一致
悪用後も sha256sum が元のパッケージハッシュと一致し、ディスクが変更されていないことを確認します。
検出エンジニアリング
Copy Fail はファイル整合性監視では検出できません。その代わりに、この脆弱性が使用するシステムコールレベルのプリミティブに焦点を当てます。
auditd ルール
以下をトリガーするカスタム auditd ルールを展開します:
AF_ALGソケット作成(ファミリー 38)splice()システムコールの使用- 非特権プロセスによる setuid バイナリへの読み取りアクセス
すべてのカスタムルールが有効であることを auditctl -l で確認しました。
エクスプロイトを2回目に実行すると、使用された正確なシステムコールに対するアラートが表示されます:
ausearch が testuser プロセスからの AF_ALG ソケット作成イベントを表示しています。
ausearch が同じ PID からの splice() イベントを表示しており、強い相関を示しています。
Sigma ルール
Sigma ルールは、auditd の検出結果をベンダーニュートラルな SIEM 形式に変換します。
AF_ALG ソケット作成と splice() 呼び出しを検出する Sigma YAML ルール。
YARA ルール
YARA ルールは、ディスク上の Copy Fail エクスプロイトコードを特定するのに役立ちます。
PoC に含まれる authencesn 文字列、ソケット定数、splice() 参照と一致する YARA ルール。
検出カバレッジの概要
| レイヤー | 検出対象 | ステータス |
|---|---|---|
| auditd | AF_ALG ソケット + splice システムコール | ✅ 展開済み |
| Sigma | SIEM経由のシステムコールパターン | ✅ ルール準備完了 |
| YARA | ディスク上の PoC コード | ✅ ルール準備完了 |
| FIM(AIDE/Tripwire) | ファイル変更 | ❌ 検知不可 – ディスク書き込みは発生しない |
インシデントレスポンスプレイブック
完全なインシデントレスポンスレポートは reports/incident-copy-fail.md で入手できます。内容は以下のとおりです:
- エグゼクティブサマリー
- 侵害指標(IoCs)
- MITRE ATT&CK マッピング(T1068、T1611)
- 封じ込めと根絶の手順
- ファイルレス攻撃に関する教訓
緩和策
即時緩和策(再起動不要):
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead