
Ansibleロールで、CVE-2026-31431に対するmodprobe.d緩和策を適用・検証し、algif_aeadカーネルモジュールを無効化します。Debian系システム向けの安全チェック付きです。
CVE-2026-31431(「Copy Fail」)のLinuxカーネルAF_ALG / algif_aeadサブシステムに対するmodprobe.d緩和策を適用(および後で削除)するためのAnsibleロールです。
Debianでテスト済みです。他のディストリビューション、エッジケース、改善に関するプルリクエストは大歓迎です。
このロールは、algif_aeadカーネルモジュールのロードを防ぐ設定スニペットを/etc/modprobe.d/に配置します:
install algif_aead /bin/false
その後、以下の手順で緩和策が実際に有効であることを検証します:
/boot/config-$(uname -r)を読み取り、AEADがカーネルに組み込まれている場合(CONFIG_CRYPTO_USER_API_AEAD=y)は実行を拒否します — modprobe.dは組み込みコードをブロックできません。algif_aeadが現在lsmodに存在しないことを確認します。AF_ALGソケットを開き、aead/gcm(aes)へのbind()を試行する小さなPythonスクリプトを実行します。緩和策適用後、bindはFileNotFoundErrorで失敗する必要があります。再起動は不要です。
元に戻す場合(例: パッチ適用済みカーネルが導入された後)は、cve_2026_31431_state=absentを設定します。
oss-securityで流布している緩和策 — install algif_aead /bin/falseを/etc/modprobe.d/に配置し、rmmodでモジュールを削除する方法 — は、CloudLinux、AlmaLinux、RHEL、その他のRHEL系ディストリビューションでは機能せず、AEADを組み込んでビルドされたカスタムカーネルでも機能しません。
これらのシステムではalgif_aeadはカーネルに組み込まれているため(CONFIG_CRYPTO_USER_API_AEAD=y)、以下の理由で機能しません:
modprobe.dルールはロードをブロックできません(ロードするものがありません — コードはすでにカーネルイメージ内にあります)。rmmod algif_aeadは組み込みコードを削除できません。コマンドは成功したように見えますが、システムは変更されず、誤った保護感を与えます。カーネルが影響を受けているかどうかは以下で確認できます:
zgrep '^CONFIG_CRYPTO_USER_API_AEAD=' /boot/config-$(uname -r)
=m → モジュール、このロールで緩和可能です。=y → 組み込み、カーネル更新+再起動またはライブパッチサブスクリプションが必要です。このロールはこれを検出して実行を拒否します。| 名前 | デフォルト | 備考 |
|---|---|---|
cve_2026_31431_state | present | 緩和策を削除するにはabsentに設定 |
cve_2026_31431_conf | /etc/modprobe.d/disable-algif_aead.conf |
ansible-galaxy install joltcan.cve_2026_31431
ansible-playbook -i <your-inventory> ~/.ansible/roles/joltcan.cve_2026_31431/playbook.yml
パッチ適用済みカーネルが稼働したらクリーンアップ:
ansible-playbook -i <your-inventory> ~/.ansible/roles/joltcan.cve_2026_31431/playbook.yml -e cve_2026_31431_state=absent
- hosts: all
become: true
roles:
- role: joltcan.cve_2026_31431
Issueとプルリクエストを歓迎します — 特に以下のもの:
algif_aeadがロード可能な非Debianディストリビューション(Arch、Gentoo、Alpineなど)でのテスト済みサポート。algif_aeadを安全にアンロードするロジック。MIT — LICENSEを参照してください。
| ブラックリストファイルのパス |