
完全なケーススタディ — 発見の経緯、仕組み、テスト方法、再現方法(安全な環境での)、そして2017年以降のほぼすべてのLinuxディストリビューションに影響する重大な脆弱性の修正方法。
このリポジトリは教育目的専用です。ここに含まれる情報は、セキュリティ専門家、研究者、サイバーセキュリティ学生を対象としています。明示的な許可なく、ここで説明されているいかなる技術もシステムで使用しないでください。 これらの情報の不正使用は、ブラジルの法律第12.737/2012号(Carolina Dieckmann法)およびインターネット民事枠組み法(第12.965/2014号)に基づく犯罪となる可能性があります。
| 項目 | 詳細 |
|---|---|
| CVE ID | CVE-2026-31431 |
| 通称 | CopyFail |
| 種別 | ローカル権限昇格(LPE) |
| CVSSスコア | 8.8(高) / 連鎖により重大になる可能性 |
| コンポーネント | Linuxカーネル — データコピー機構 |
| 影響バージョン | Linuxカーネル ≤ 7.0(2017年以降のディストリビューション) |
| 発見者 | Theori(セキュリティ企業) |
| 公開日 | 2026年3月 |
| アップストリームパッチ | 責任ある開示から約1週間後に公開 |
| CISAステータス | 積極的に悪用されているとして登録 — KEVカタログ |
| CISA期限 | 連邦政府機関は2026年5月15日までに修正する必要あり |
CopyFail脆弱性は、セキュリティ企業**Theori**がLinuxカーネルのコード解析中に、特にメモリ空間間でデータをコピーする役割を担うサブシステムで発見しました。
2026年3月 → Theoriの研究者がカーネルの異常な動作を特定
2026年3月 → カーネルセキュリティチームへの責任ある開示(Responsible Disclosure)
約1週間後 → kernel.orgでアップストリームパッチが公開
2026年5月 → エクスプロイトコード(PoC)が公開
2026年5月1日 → Microsoftが技術分析を公開
2026年5月4日 → CISAがKEVカタログ(既知の悪用された脆弱性)に追加
2026年5月15日 → 米国連邦政府機関の修正期限
Linuxカーネルには、メモリの異なる領域(ユーザースペース ↔ カーネルスペース)間でデータをコピーする内部ルーチンがあります。この欠陥は、影響を受けるコンポーネントが本来コピーすべき特定のデータのコピーに失敗するため、CopyFailという名前が付けられました。これによりカーネル内の機密データ構造が破損し、権限昇格のための悪用の窓が開かれます。
Linuxカーネルはメモリを2つの異なる空間で管理しています:
┌─────────────────────────────────────┐
│ ユーザースペース │
│ 攻撃者のプロセス(uid=1000) │
│ → 悪意のあるsyscallを呼び出す │
└────────────────┬────────────────────┘
│ syscall
▼
┌─────────────────────────────────────┐
│ カーネルスペース │
│ データコピールーチン │
│ → バグ: メタデータのコピーに失敗 │
│ → 制御構造を破損 │
│ → 攻撃者がポインタを操作 │
│ → rootとしてコードを実行 │
└─────────────────────────────────────┘
uid=0(root)で実行され、システムの完全な制御を獲得します// 脆弱なバージョン(簡略化、教育用)
int kernel_copy_data(struct user_request *req) {
struct kernel_buffer kbuf;
// バグ: データの一部のみをコピーし、重要なフィールドを無視
// セキュリティフィールド(security_context)はコピーされない!
memcpy(&kbuf.data, req->data, req->size);
// → kbuf.security_context は初期化されないまま(メモリのゴミ)
process_buffer(&kbuf); // 破損したデータを使用
return 0;
}
// 修正されたバージョン
int kernel_copy_data(struct user_request *req) {
struct kernel_buffer kbuf;
// 修正: セキュリティフィールドを含む構造体全体をコピー
if (copy_from_user(&kbuf, req, sizeof(struct kernel_buffer)))
return -EFAULT;
process_buffer(&kbuf);
return 0;
}
| ディストリビューション | バージョン | ステータス |
|---|---|---|
| Red Hat Enterprise Linux | 10.1 | ✅ 脆弱 |
| Ubuntu LTS | 24.04 | ✅ 脆弱 |
| Amazon Linux | 2023 | ✅ 脆弱 |
| SUSE Linux | 16 | ✅ 脆弱 |
| Debian | 最新の安定版 | ✅ 脆弱 |
| Fedora | 最新版 | ✅ 脆弱 |
| Kubernetes(ノード) | カーネル≤7.0上のすべて | ✅ 脆弱 |
⚠️ 2017年以降に出荷されたカーネル ≤ 7.0 を実行しているLinuxディストリビューションはすべて、潜在的に脆弱です。
共有サーバー(例:ホスティング環境、VPS)上の権限のないユーザーがエクスプロイトを実行し、rootを取得します。
インターネット → [Web脆弱性によるRCE] → 制限付きシェル → [CopyFail] → root
Microsoftの分析によると:この欠陥はインターネット経由で配信されるエクスプロイト(例:WebアプリケーションのRCE)と連鎖させることができ、サーバーの完全な侵害につながります。
Linuxユーザーが、ローカルでエクスプロイトを起動する悪意のあるリンクや添付ファイルを開くように騙されます。
悪意のある攻撃者がオープンソース開発者のアカウントを侵害し、広く配布されているコードにエクスプロイトを注入します。
侵害されたクラウドサーバーは、同じインフラストラクチャ上のすべてのVM、コンテナ、アプリケーション、顧客データベースを露出させる可能性があります。
⚠️ 管理された隔離環境のみ — 外部ネットワークアクセスのないVM!
# 必要なツール
sudo apt install -y git build-essential libssl-dev bc flex bison
# 現在のカーネルバージョンを確認
uname -r
# 脆弱な範囲(≤ 7.0)にあるか確認
# 脆弱な出力例: 6.8.0-51-generic
# 1. 隔離されたVMを作成(推奨:VirtualBoxまたはQEMU)
# Ubuntu 24.04またはDebian BookwormのISOを使用
# 2. VMが本番インターネットにアクセスできないことを確認
# (ホストオンリーネットワークまたは隔離されたNATを使用)
# 3. 攻撃者をシミュレートするための権限のないユーザーを作成
sudo adduser testuser
su - testuser
# 4. testuserにsudoがないことを確認
sudo whoami # 戻り値: "testuser is not in the sudoers file"
# 検証スクリプト(悪用せず、確認のみ)
#!/bin/bash
KERNEL_VERSION=$(uname -r | cut -d. -f1,2)
MAJOR=$(echo $KERNEL_VERSION | cut -d. -f1)
MINOR=$(echo $KERNEL_VERSION | cut -d. -f2)
echo "[*] 検出されたカーネル: $(uname -r)"
if [ "$MAJOR" -lt 7 ] || ([ "$MAJOR" -eq 7 ] && [ "$MINOR" -eq 0 ]); then
echo "[!] CVE-2026-31431(CopyFail)に対して潜在的に脆弱"
echo "[!] ディストリビューションのベンダーがパッチを適用したか確認してください"
else
echo "[+] カーネルバージョンは影響範囲外"
fi
# パッチが適用されたか確認(パッケージの変更ログ経由)
apt changelog linux-image-$(uname -r) 2>/dev/null | grep -i "CVE-2026-31431" && \
echo "[+] 変更ログでCVE-2026-31431パッチが見つかりました" || \
echo "[?] 変更ログでパッチが検出されませんでした — 手動で確認してください"
🔒 このセクションは厳密に教育目的です。以下のコードは攻撃ベクトルの簡略化された教育用表現であり、実際のエクスプロイトではありません(倫理的な理由からここでは公開されていません)。
#!/usr/bin/env python3
"""
CVE-2026-31431(CopyFail)— 教育用表現
目的: 攻撃的/防御的セキュリティ教育
許可なくシステムで使用しないでください
"""
import ctypes
import os
import sys
def check_environment():
"""ラボ環境にいるか確認"""
kernel = os.uname().release
print(f"[*] カーネル: {kernel}")
print(f"[*] 現在のUID: {os.getuid()}")
if os.getuid() == 0:
print("[-] すでにrootです。エクスプロイトは不要です。")
sys.exit(0)
def demonstrate_concept():
"""
攻撃ベクトルの概念デモンストレーション:
1. 脆弱なsyscallを特定
2. 不完全なコピーをトリガーするペイロードを構築
3. メモリ破損を監視
4. 権限昇格のためにフローをリダイレクト
実際のエクスプロイトでは:
- 攻撃者はヒープスプレーやROPチェーンなどの技術を使用
- 破損と破損データの使用の間のウィンドウを悪用
- プロセスの資格情報を上書き(uid → 0)
"""
print("[*] 概念: 欠陥のあるコピールーチンのトリガー")
print("[*] 概念: kernel_buffer構造体の破損を監視")
print("[*] 概念: 実行フローのリダイレクト")
print("[*] 参照: https://xint.io/blog/copy-fail-linux-distributions")
def main():
check_environment()
demonstrate_concept()
print("\n[i] 完全な技術分析については、以下を参照してください:")
print(" → https://xint.io/blog/copy-fail-linux-distributions")
print(" → https://www.microsoft.com/en-us/security/blog/2026/05/01/cve-2026-31431-copy-fail-vulnerability-enables-linux-root-privilege-escalation/")
if __name__ == "__main__":
main()
# 別のターミナルでカーネルログを監視
sudo dmesg -w | grep -E "(oops|panic|null pointer|exploit|cve)"
# システムコールを監視
sudo strace -e trace=all -p <プロセスPID>
# UIDの変更をリアルタイムで確認
watch -n 0.5 'cat /proc/self/status | grep -E "^(Uid|Gid)"'
# Ubuntu / Debian
sudo apt update && sudo apt upgrade -y linux-image-generic
sudo reboot
# 再起動後にバージョンを確認
uname -r
# Red Hat / CentOS / Amazon Linux
sudo dnf update -y kernel
sudo reboot