
完全なケーススタディ — 発見の経緯、仕組み、テスト方法、再現方法(安全な環境での)、そして2017年以降のほぼすべてのLinuxディストリビューションに影響する重大な脆弱性の修正方法。
このリポジトリは教育目的専用です。ここに含まれる情報は、セキュリティ専門家、研究者、サイバーセキュリティ学生を対象としています。明示的な許可なく、ここで説明されているいかなる技術もシステムで使用しないでください。 これらの情報の不正使用は、ブラジルの法律第12.737/2012号(Carolina Dieckmann法)およびインターネット民事枠組み法(第12.965/2014号)に基づく犯罪となる可能性があります。
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;
}
⚠️ 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
# SUSE
sudo zypper update -t package kernel-default
sudo reboot
# インストール済みカーネルの変更ログを確認
apt changelog linux-image-$(uname -r) | grep CVE-2026-31431
# UbuntuのCVEトラッカー経由
# https://ubuntu.com/security/CVE-2026-31431
# Red Hat CVEデータベース経由
# https://access.redhat.com/security/cve/CVE-2026-31431
# SUIDバイナリの実行を制限(攻撃対象領域を削減)
find / -perm -4000 -type f 2>/dev/null
# 疑わしいsyscallの監査を有効化
sudo auditctl -a always,exit -F arch=b64 -S all -k syscall_audit
# 権限昇格の試みを監視
sudo apt install -y auditd
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/sudoers -p wa -k sudoers_changes
# カーネル保護を有効化
# /etc/sysctl.conf — 以下を追加:
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.perf_event_paranoid = 3
kernel.unprivileged_bpf_disabled = 1
net.core.bpf_jit_harden = 2
# 適用
sudo sysctl -p
# 悪用の可能性のある兆候:
# 1. rootとして実行されている一般ユーザーのプロセス
ps aux | awk '$1 != "root" && $2 == "0"'
# 2. 最近作成された新しいSUIDバイナリ
find / -perm -4000 -newer /etc/passwd -type f 2>/dev/null
# 3. /etc/passwdの不審なエントリ
grep "uid=0" /etc/passwd
# 4. 破損メッセージを含むカーネルログ
dmesg | grep -iE "(oops|BUG:|corruption|cve)"
# 5. 許可されていないネットワーク接続
ss -tulnp | grep LISTEN
パッチ管理は重要 — アップストリームパッチは約1週間で利用可能でしたが、ディストリビューションが配信するにはさらに時間がかかります。ベンダーを積極的に監視してください。
多層防御 — LPE単独では不十分です。攻撃者は初期アクセスが必要です。システムへのアクセスを制御してください。
脆弱性の連鎖 — 単独では「低リスク」のCVEでも、組み合わせると重大になる可能性があります。CVSS単独ではなく、コンテキストでリスクを評価してください。
サプライチェーンは現実のベクトル — 広く使用されているオープンソースコードは攻撃ベクトルになり得ます。パッケージの整合性検証を実装してください。
Kubernetesとコンテナは免疫ではない — ホストカーネルが脆弱な場合、その上のコンテナも影響を受けます。
常に完全な構造体をコピー — カーネル制御構造体の個々のフィールドを、すべての重要なフィールドが初期化されることを保証せずにコピーしないでください。
copy_from_user()を正しく使用 — カーネルのコピー関数には特定のセマンティクスがあります。使用前にドキュメントを読んでください。
セキュリティコードレビュー — カーネルの変更には、機能性だけでなくセキュリティに焦点を当てたレビューが必要です。
カーネル更新は優先事項 — 単なる「定期的なメンテナンス」ではありません。カーネルの脆弱性はしばしば重大です。
資産インベントリは不可欠 — 存在を知らないものは修正できません。Linuxシステムとそのカーネルバージョンの最新のインベントリを維持してください。
インシデント対応計画 — CISA KEVのような攻撃的な期限を持つ重大な脆弱性に備えたプレイブックを用意してください。
古い情報を見つけた場合やテストシナリオを追加したい場合は、issueまたはPRを開いてください!
行動規範を尊重してください:このリポジトリは教育と防御のためのものです — 悪意のある活動のためではありません。
MITライセンス — システムの学習、教育、防御に使用してください。攻撃には決して使用しないでください。
「攻撃を知ることは、防御を構築するための第一歩です。」
⭐ このケーススタディが役に立った場合は、リポジトリにスターを残してください!
| 項目 | 詳細 |
|---|
| 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日までに修正する必要あり |
| ディストリビューション | バージョン | ステータス |
|---|
| Red Hat Enterprise Linux | 10.1 | ✅ 脆弱 |
| Ubuntu LTS | 24.04 | ✅ 脆弱 |
| Amazon Linux | 2023 | ✅ 脆弱 |
| SUSE Linux | 16 | ✅ 脆弱 |
| Debian | 最新の安定版 | ✅ 脆弱 |
| Fedora | 最新版 | ✅ 脆弱 |
| Kubernetes(ノード) | カーネル≤7.0上のすべて | ✅ 脆弱 |