
No-reboot緩和スクリプト for the Copy Failカーネルバグ(CVE-2026-31431)。脆弱なalgif_aeadモジュールを無効化し、setuidバイナリのページキャッシュを退避します。
Copy Fail / CVE-2026-31431 向けの最小限の再起動不要の緩和ヘルパーです。
このスクリプトは、脆弱性のある algif_aead モジュールパスを無効化し、モジュールの即時アンロードを試みます。また、/usr/bin/su のページキャッシュ退避をベストエフォートで実行します。
これは緩和策であり、カーネル修正ではありません。ベンダーの修正済みカーネルが利用可能になり次第、インストールしてください。
このスクリプトは、公開されている Copy Fail アドバイザリで推奨されている緩和策を実行します:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || true
これにより、algif_aead が modprobe 経由で再度ロードされるのを防ぎ、可能であれば実行中のカーネルからアンロードします。
次に、/usr/bin/su の最初のページに対して POSIX_FADV_DONTNEED を指定して posix_fadvise() を呼び出す小さな Python スニペットを実行します:
os.posix_fadvise(fd, 0, page, os.POSIX_FADV_DONTNEED)
これは、関連するページをページキャッシュから退避させるためのベストエフォートの試みです。パッチ適用の代わりにはならず、対象となるすべての setuid バイナリのクリーンアップを保証するものではありません。
/usr/bin/su なのか?公開されている Copy Fail の概念実証コードは、デフォルトで /usr/bin/su を対象としています。そのため、このスクリプトは脆弱なモジュールパスを無効化した後、/usr/bin/su の最初のページをページキャッシュからドロップしようとします。
環境内で他の setuid バイナリに対するテスト済みまたは疑わしい悪用がある場合は、それに応じてスクリプトを確認し、調整してください。
まずスクリプトを確認してください。
sudo ./mitigate-copy-fail.sh
モジュールがロードされていないことを確認します:
lsmod | grep '^algif_aead' || echo "algif_aead is not loaded"
modprobe ルールが存在することを確認します:
cat /etc/modprobe.d/disable-algif.conf
期待される出力:
install algif_aead /bin/false
モジュールを手動でロードしてみます:
sudo modprobe algif_aead
これは失敗するか、ロードを拒否されるはずです。
修正済みカーネルをインストールした後、またはリスクを受け入れた場合にのみ、これを元に戻してください。
sudo rm -f /etc/modprobe.d/disable-algif.conf
sudo modprobe algif_aead
このスクリプトは以下を行いません:
コンテナ、サンドボックス、CI ランナー、マルチユーザーホストなどの信頼できないワークロードについては、seccomp による AF_ALG ソケット作成のブロックなど、追加の強化を検討してください。