Linuxカーネルの脆弱性を検出し、緩和策の適用状況を確認し、修復手順を案内するシェルスクリプト — SSH、Ansible、psshを使用してローカルまたは複数サーバーにわたって実行できるように設計されています。
Copy Fail は、Linuxカーネルの algif_aead 暗号モジュールにおける深刻度の高いローカル権限昇格(LPE)脆弱性です。2017年に導入されたロジック上の欠陥により、権限のないローカルユーザーが任意の読み取り可能なファイルのページキャッシュに4バイトの制御されたデータを書き込むことができ、setuidバイナリを上書きしてrootを取得するのに十分です。動作する732バイトのPython概念実証コードが存在し、公開されています。
| CVE | CVE-2026-31431 |
| CVSS | 7.8(高) |
| 公開日 | 2026年4月29日 |
| 影響を受けるバージョン | Linuxカーネル 4.13 – 6.x(2017–2026) |
| ディストリビューション | Ubuntu、RHEL、SUSE、Debian、Amazon Linux、およびその他大多数 |
| リモートからの悪用 | 不可 — ローカルアクセスが必要 |
| パッチの有無 | 一部のみ — 各ディストリビューションのセキュリティ勧告を確認してください |
| チェック項目 | root権限が必要か |
|---|---|
| カーネルバージョン — 影響範囲(≥ 4.13)に該当するか | 不要 |
algif_aead モジュール — ロード済み、ディスク上に存在、またはブラックリスト登録済みか | 不要 |
ブートパラメータ — initcall_blacklist=algif_aead_init の有無 | 不要 |
| AF_ALGソケットの到達可能性 — 悪用経路が開いているか | 不要 |
| SELinuxの状態 | 不要 |
| AppArmorの状態 | 必要 — rootなしでは出力の一部のみ |
| ディストリビューションのパッチ状態 — CVEがカーネルチェンジログに記載されているか | 不要 |
スクリプトの実行にrootは不要です — AppArmorの状態チェックを除くすべてのチェックは通常ユーザーで動作します。完全な結果を得るには
sudoでの実行が推奨され、curlからのパイプ実行時にはより安全な選択肢です。
このスクリプトは、主要なすべてのLinuxディストリビューションで動作するように設計されています:
| ディストリビューション系統 | パッケージマネージャーのチェック | モジュールパス |
|---|---|---|
| Debian、Ubuntu | dpkg + カーネルチェンジログ | /lib/modules/ |
| RHEL、CentOS、Amazon Linux | rpm(kernel、kernel-rt) | /lib/modules/ |
| SUSE、openSUSE | rpm(kernel-default) | /lib/modules/ |
| Arch Linux | pacman + 勧告リンク | /usr/lib/modules/ |
| Fedora | rpm + /usr/lib/modules/ フォールバック | /usr/lib/modules/ |
bashが必要です — このスクリプトはbash固有の構文を使用しており、sh、ash、dashでは実行できません。Alpine Linux(デフォルトでbusybox ashを使用)では、最初にbashをインストールしてください:apk add bash
rootなし — ほとんどのチェックが動作します:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | bash
rootあり — AppArmorの状態を含む完全な結果:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash
ヒント: 本番環境では特定のコミットSHAに固定して、スクリプトが意図せず変更されないようにしてください:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/COMMIT_SHA/check_copyfail.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh -o check_copyfail.sh
less check_copyfail.sh
bash check_copyfail.sh # rootなし
sudo bash check_copyfail.sh # 完全な結果
SSHループ
for HOST in server1 server2 server3; do
echo "=== $HOST ==="
ssh "$HOST" "curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
done
Ansible
- name: Check Copy Fail vulnerability
hosts: all
tasks:
- name: Run check script
script: check_copyfail.sh
become: yes
並列SSH
pssh -h hosts.txt -i \
"curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
============================================================
Copy Fail CVE-2026-31431 – Vulnerability Check
============================================================
>>> Kernel Version
[INFO] Running kernel: 5.15.0-107-generic
[WARN] Kernel 5.15.0-107-generic is in the affected range (4.13 – 6.x).
>>> algif_aead Module Status
[WARN] algif_aead module is currently LOADED — system is exploitable.
[WARN] Module file found at: /lib/modules/5.15.0-107-generic/kernel/crypto/algif_aead.ko
[WARN] algif_aead is NOT blacklisted — it can be loaded on demand.
>>> Kernel Boot Parameter Mitigation
[WARN] initcall_blacklist=algif_aead_init is NOT set in boot parameters.
>>> AF_ALG Socket Reachability
[WARN] AF_ALG sockets are reachable by this user — exploit path is open.
>>> Mandatory Access Control (SELinux / AppArmor)
[WARN] Neither SELinux nor AppArmor tools detected — no MAC layer present.
>>> Distribution Patch Status
[WARN] Could not confirm CVE-2026-31431 is listed as fixed in running kernel's changelog.
============================================================
SUMMARY
============================================================
!! LIKELY VULNERABLE — No confirmed mitigation detected.
Recommended actions (in order of preference):
1. Apply your distro's kernel update as soon as available.
2. Add to /etc/modprobe.d/copyfail.conf:
blacklist algif_aead
install algif_aead /bin/true
Then run: sudo depmod -a && sudo update-initramfs -u
3. Add to kernel boot parameters (grub):
initcall_blacklist=algif_aead_init
4. Immediately unload the module if loaded:
sudo rmmod algif_aead
============================================================
優先順位の高い順に適用してください:
1. カーネルにパッチを適用 (最善の修正)
# Debian / Ubuntu
sudo apt update && sudo apt upgrade linux-image-$(uname -r)
# RHEL / CentOS / Amazon Linux
sudo yum update kernel
# SUSE
sudo zypper update kernel-default
2. モジュールをブラックリスト登録 (即時、永続的)
sudo tee /etc/modprobe.d/copyfail.conf << 'EOF'
blacklist algif_aead
install algif_aead /bin/true
EOF
sudo depmod -a
# Debian/Ubuntu
sudo update-initramfs -u
# RHEL/Fedora
sudo dracut -f
3. モジュールを今すぐアンロード (即時、再起動後は持続しない)
sudo rmmod algif_aead
4. カーネルブートパラメータ (ブラックリスト登録の代替)
GRUB設定に initcall_blacklist=algif_aead_init を追加して再起動してください。
MIT — 自由に使用できますが、保証はありません。rootとして実行する前に、必ずスクリプトを確認してください。