
Debian/Ubuntu および RHEL/Rocky/AlmaLinux システムに CVE-2026-31431 (AF_ALG) カーネルモジュールの緩和策を適用・ロールバックするための Ansible プレイブックです。
このプレイブックは、脆弱性のある algif_aead カーネルモジュールを無効化することで CVE-2026-31431 を緩和します:
grubby を使用してカーネルの initcall ブラックリスト引数を追加します⚠️ 重要: このプレイブックはサーバーを自動的に再起動しません。再起動が必要な場合にリマインダーメッセージを表示し、運用担当者がメンテナンスウィンドウ中に再起動をスケジュールできるようにします。
サンプル設定ファイルは examples/ ディレクトリに用意されています:
# サンプルインベントリのコピー
cp examples/inventory/hosts.ini inventory/hosts.ini
# サンプル Ansible 設定のコピー (任意)
cp examples/ansible.cfg ansible.cfg
詳細なカスタマイズ手順については examples/README.md を参照してください。
サーバー情報を inventory/hosts.ini に編集します:
[servers]
server1.example.com
server2.example.com ansible_host=192.168.1.50
[servers:vars]
ansible_user=admin
ansible_become=true
ansible all -m ping
ansible-playbook mitigation-playbook.yaml
インベントリ内のすべてのホストに緩和策を適用する場合:
ansible-playbook mitigation-playbook.yaml
特定のホストまたはグループに適用する場合:
ansible-playbook mitigation-playbook.yaml --limit webservers
緩和策をロールバック (削除) する場合:
ansible-playbook mitigation-playbook.yaml -e "rollback=true"
または rollback タグを使用:
ansible-playbook mitigation-playbook.yaml --tags rollback -e "rollback=true"
非推奨の systemd ドロップインファイルを削除する場合 (この緩和策の旧バージョンから移行する場合):
ansible-playbook mitigation-playbook.yaml -e "run_systemd_cleanup=true"
TASK [CVE-2026-31431 Summary (Debian)] ****************************************
ok: [server1] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server1 =====",
"Action: apply",
"Module loaded (pre): False",
"Module loaded (post): False",
"Reboot required: False"
]
}
TASK [Remind operator to reboot (RHEL)] ****************************************
ok: [server2] => {
"msg": "REMINDER: Kernel args changed. Reboot required to activate mitigation."
}
TASK [CVE-2026-31431 Summary (Red Hat)] ****************************************
ok: [server2] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server2 =====",
"Action: apply",
"Kernel arg active (pre): False",
"Kernel arg active (post): False",
"Reboot required: True"
]
}
TASK [Remind to reboot if required (Red Hat)] **********************************
ok: [server2] => {
"msg": "REMINDER: A reboot is required to activate/deactivate the mitigation on this Red Hat-based host."
}
| OS ファミリー | 再起動が必要な場合 | 動作 |
|---|---|---|
| Debian/Ubuntu | モジュールが「使用中」でアンロードできなかった場合 | リマンダーのみ |
| RHEL/Rocky/Alma | Grubby がカーネル引数を変更した場合 | リマンダーのみ |
このプレイブックは、運用担当者がメンテナンスウィンドウを完全に制御できるように、自動的に再起動しないように設計されています。
mitigation - 緩和策の適用タスクのみ実行rollback - ロールバックタスクのみ実行systemd-cleanup - systemd クリーンアップタスクのみ実行例:
# 緩和策タスクのみ実行
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags mitigation
# ロールバックタスクのみ実行
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags rollback -e "rollback=true"
プレイブック実行後 (プロンプトが表示された場合は再起動後)、緩和策が有効であることを確認します:
# モジュールがブラックリストに登録されているか確認
cat /etc/modprobe.d/disable-algif.conf
# モジュールがロードされているか確認 (何も返らないはず)
lsmod | grep algif_aead
# カーネル引数が存在するか確認
grep initcall_blacklist /proc/cmdline
# 以下のような出力になるはず:
# ... initcall_blacklist=algif_aead_init ...
MIT ライセンス - 詳細は LICENSE ファイルを参照してください
貢献は歓迎します! 問題やプルリクエストを送信してください。
このプレイブックは以下のソースから着想を得て作成されました:
このプレイブックは現状のまま提供されます。本番システムに適用する前に、必ずご自身の環境で十分にテストしてください。著者は、このプレイブックの使用によって生じたいかなるシステム損傷やダウンタイムについても責任を負いません。
| 変数 | デフォルト | 説明 |
|---|
rollback | false | true に設定すると緩和策をロールバック |
run_systemd_cleanup | false | true に設定すると非推奨の systemd ドロップインを削除 |
target_hosts | all | 実行を特定のホストまたはグループに制限 |
mitigation_serial | 25% | ローリング実行のバッチサイズ |