このリポジトリには、Ubuntuシステム上で重大な脆弱性 CVE-2026-31431(通称 "Copy Fail")を無効化するために設計されたスクリプトが含まれています。
[!IMPORTANT] 互換性: これらのスクリプトは Ubuntu Server 24.04 LTS 向けに調整され、テスト済みです。ロジックは他のディストリビューションでも同様ですが、Debian や他のLinuxフレーバーではテストされていません。
パッチを適用する前に、公式の検出スクリプト(rootsecdev によって開発)をダウンロードして、システムの現在の状態を検証してください:
# 検出スクリプトのダウンロード
wget https://raw.githubusercontent.com/rootsecdev/cve_2026_31431/main/test_cve_2026_31431.py
# python3 がインストールされていることを確認
python3 --version
CVE-2026-31431 の脆弱性($CVSS\ 7.8$)は、Linuxカーネルの暗号サブシステム(algif_aead モジュール)に影響を与えます。
ローカルユーザーは、splice() 関数の「インプレース」最適化の欠陥を悪用して、システムの ページキャッシュ を破損させることができます。これにより、攻撃者はカーネルに任意のデータ(シーケンス番号)を、読み取り専用であるべきファイル(SUIDバイナリや機密システムファイルなど)のメモリページに書き込ませることができます。
modprobe -r では不十分な理由Linuxカーネルは 自動ロード と呼ばれるメカニズムを使用します。プロセスやスクリプト(検出器など)が AF_ALG タイプのソケットを要求すると、手動で削除された場合でもカーネルは自動的にモジュールを再ロードします。このパッチで使用される方法("ハードブロック")は、カーネルによるモジュールバイナリのロードを物理的に防止します。
テスターを実行して、現在のカーネルが影響を受けるかどうかを確認します:
python3 test_cve_2026_31431.py
スクリプトが [!] VULNERABLE と表示した場合は、次のステップに進みます。
patch-CVE-2026-31431.sh スクリプトは、攻撃ベクトルを恒久的に無効化します。/etc/modprobe.d/ に設定ファイルを作成し、initramfs を更新して、再起動後もブロックが持続するようにします。
chmod +x patch-CVE-2026-31431.sh
sudo ./patch-CVE-2026-31431.sh
検出スクリプトを再度実行します。前提条件が満たされていないことを示すメッセージが表示されるはずです:
[+] Precondition not met ('authencesn(...) cannot be instantiated)。
これにより、モジュールが 正常に無効化された ことが確認されます。
Ubuntuがカーネルアップデートを通じて公式修正をリリースしたら(apt upgrade のメモで CVE-2026-31431 を確認)、ネイティブの暗号機能を復元する必要があります:
chmod +x unpatch-CVE-2026-31431.sh
sudo ./unpatch-CVE-2026-31431.sh
この保護は、/etc/modprobe.d/cve-2026-31431-mitigation.conf 内の以下のディレクティブに依存しています:
blacklist algif_aead
install algif_aead /bin/true
install コマンドは、モジュールをロードしようとするカーネルの試みを /bin/true にリダイレクトします。これは、脆弱なコードを実行せずに「成功」の終了コードを返します。