
CVE-2026-31431向けの自動スキャナー兼パッチ支援ツール。SSH経由で脆弱なLinuxホストを検出し、カーネルバージョンを検証して、複数のディストリビューションにわたってカーネルアップグレードまたは一時的な緩和策を適用します。
Copy Fail は、LinuxインフラストラクチャにおけるCVE-2026-31431(Linux Kernel algif_aead ローカル権限昇格)の脆弱性を検出・修正するための自動セキュリティスキャナー兼パッチヘルパーです。
CVE-2026-31431 は、Linuxカーネルモジュール algif_aead(AEAD用非同期暗号インターフェース)におけるローカル権限昇格(LPE)の脆弱性です。この脆弱性により、ローカルユーザーがrootレベルへの権限昇格を達成できる可能性があります。
このツールは以下を支援します:
注記:このツールは、システム管理者による内部監査およびパッチ適用のみを目的としています。所有しているシステム、またはアクセス権限が明示的に付与されたシステムでのみ使用してください。

algif_aeadモジュールの状態検出(ロード済み/未ロード)パッケージマネージャーを介した脆弱なホストへの自動カーネルアップグレード:
オプション: パッチ適用後の自動再起動
algif_aead モジュールの無効化パッチ済みカーネルバージョンのデータベース:
paramiko>=3.0.0 # SSHライブラリ
rich>=13.0.0 # 高機能ターミナルUI
git clone https://github.com/gagaltotal/cve-2026-31431-copy-fail.git
cd cve-2026-31431-copy-fail
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
または手動インストール:
pip install paramiko>=3.0.0 rich>=13.0.0
python3 copyfail_scanner.py --help
# SSHキーでサブネットをスキャン
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH_TO_KEY>
# 特定の複数ホストをスキャン
python3 copyfail_scanner.py --hosts <IP1>,<IP2>,<IP3> --user <USERNAME> [--password <PASSWORD>]
# スキャン+自動パッチ
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH> --patch
# スキャン+一時的な緩和策
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH> --mitigate
| オプション | 説明 | 例 |
|---|---|---|
--subnet | ターゲットサブネットCIDR(--hostsと排他的) | --subnet 192.168.1.0/24 |
--hosts | カンマ区切りのIPリスト(--subnetと排他的) | --hosts 192.168.1.10,192.168.1.20 |
--user | SSHユーザー名 (必須) | --user root |
--password | SSHパスワード(オプション、キーがない場合に使用) | --password secret123 |
--key | SSH秘密鍵のパス | --key ~/.ssh/id_rsa |
--port | SSHポート(デフォルト:22) | --port 2222 |
--threads | 並列スレッド数(デフォルト:30) | --threads 50 |
--patch | 脆弱なホストへの自動カーネルアップグレード | --patch |
--reboot | パッチ適用後の自動再起動(--patchと併用) | --patch --reboot |
--mitigate | 一時的な緩和策の適用(algif_aeadの無効化) | --mitigate |
--output | スキャン結果のJSONファイルへのエクスポート | --output hasil.json |
--yes | パッチ/緩和策適用前の確認プロンプトをスキップ | --yes |
python3 copyfail_scanner.py \
--subnet 192.168.1.0/24 \
--user ubuntu \
--key ~/.ssh/id_rsa
出力:スキャン結果テーブルとサマリーを表示
python3 copyfail_scanner.py \
--hosts 10.0.1.5,10.0.1.6,10.0.1.7 \
--user admin \
--password my_password123
python3 copyfail_scanner.py \
--subnet 172.16.0.0/16 \
--user root \
--key ~/.ssh/id_rsa \
--mitigate
アクション:全ホストをスキャンし、脆弱なホストでalgif_aeadモジュールを無効化(確認を求める)
python3 copyfail_scanner.py \
--subnet 192.168.0.0/24 \
--user ubuntu \
--key ~/.ssh/id_rsa \
--patch
アクション:カーネルをアップグレードするが、自動再起動はしない(手動再起動が必要)
python3 copyfail_scanner.py \
--subnet 10.10.0.0/24 \
--user root \
--key ~/.ssh/id_rsa \
--patch \
--reboot \
--yes
アクション:スキャン、カーネルパッチ、自動再起動、確認プロンプトをスキップ
python3 copyfail_scanner.py \
--subnet 192.168.1.0/24 \
--user sysadmin \
--key ~/.ssh/id_rsa \
--output scan_results_$(date +%Y%m%d_%H%M%S).json
出力:ターミナルにテーブル+ファイルにJSON結果
python3 copyfail_scanner.py \
--subnet 10.0.0.0/25 \
--user ubuntu \
--key ~/.ssh/id_rsa \
--port 2222 \
--threads 50
スキャンの出力例:
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┓
┃ IP ┃ Hostname ┃ Distro ┃ Kernel ┃ algif ┃ Status ┃ Action ┃ Notes ┃
┣━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━┫
┃ 192.168.1.10 ┃ web-01 ┃ Ubuntu 22.04 ┃ 6.8.0-60 ┃ LOADED ┃ ✓ 安全 ┃ - ┃ Patched ┃
┃ 192.168.1.11 ┃ web-02 ┃ Ubuntu 20.04 ┃ 5.4.0-200 ┃ NOT_LDD ┃ ✗ 脆弱 ┃ Patched ┃ - ┃
┃ 192.168.1.12 ┃ db-01 ┃ RHEL 8.9 ┃ 5.14.0-560 ┃ LOADED ┃ ? 不明 ┃ - ┃ Distro ┃
┗━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┛
サマリー:
スキャンした総ホスト数:12
SSHアクセス可能:11
オフライン:1
脆弱:2
パッチ済み:8
状態不明:1
hostname -f の結果uname -r から){
"cve": "CVE-2026-31431",
"scan_time": "2026-05-08T15:30:45.123456",
"results": [
{
"ip": "192.168.1.10",
"ssh_reachable": true,
"auth_ok": true,
"hostname": "web-01",
"distro": "Ubuntu 22.04 LTS",
"os_id": "ubuntu",
"kernel_version": "6.8.0-60-generic",
"algif_loaded": true,
"modprobe_blocked": false,
"patched": true,
"patch_applied": false,
"mitigation_applied": false,
"retry_count": 0,
"error": ""
}
]
}
スキャナーは以下のディストリビューションを自動検出します: