[!IMPORTANT] このリポジトリはアーカイブされています。 Copy Fail チェックは現在 cve-check に移行しており、他の脆弱性チェックや、修復を適用するオプションの
--fixモードとともに提供されています。このチェックについては checks/CVE-2026-31431 を参照してください。curl -fsSL https://raw.githubusercontent.com/codesource/cve-check/main/cve-check.sh | sudo bash -s -- CVE-2026-31431以下の
check_copyfail.shは引き続き動作しますが、更新は行われません。
Linux カーネルの脆弱性を検出し、緩和策の状態を確認し、修復を案内するシェルスクリプト — ローカルで、または SSH、Ansible、pssh を介してフリート全体で実行できるように設計されています。
Copy Fail は、Linux カーネルの algif_aead 暗号モジュールにおける高深刻度のローカル権限昇格 (LPE) 脆弱性です。2017 年に導入されたロジックの欠陥により、非特権のローカルユーザーが、読み取り可能な任意のファイルのページキャッシュに制御された 4 バイトを書き込むことができます — これだけで setuid バイナリを上書きし、root を取得するのに十分です。動作する 732 バイトの Python による概念実証 (PoC) が存在し、公開されています。
| CVE | CVE-2026-31431 |
| CVSS | 7.8 (High) |
| 公開日 | 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 なしでは部分的な出力のみ |
| ディストリビューションのパッチ状況 — カーネル changelog に CVE が記載されているか | 不要 |
スクリプトの実行に root は不要 です — AppArmor の状態を除くすべてのチェックは一般ユーザーで動作します。完全な結果を得るには
sudoでの実行を推奨します。また、curlからパイプする場合はより安全な選択肢です。
このスクリプトは、すべての主要な Linux ディストリビューションで動作するように設計されています:
| ディストリビューションファミリー | パッケージマネージャのチェック | モジュールパス |
|---|---|---|
| Debian、Ubuntu | dpkg + カーネル changelog | /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 # without root
sudo bash check_copyfail.sh # full results
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 で実行する前に必ず内容を確認してください。