Linuxホスト上でCVE-2026-31431(「Copy Fail」)を検出し、(任意で)緩和します。
この脆弱性は、AF_ALGソケットファミリとauthencesn(hmac(sha256),cbc(aes)) AEADトランスフォームを介して到達可能なページキャッシュ書き込みプリミティブです。このスクリプトはTheoriが実証したものと同じプリミティブを再現しますが、setuidバイナリではなく自己作成の一時ファイルを対象とするため、テスト自体は非破壊的です。
カーネルが脆弱な場合、スクリプトは緩和策の適用を提案します:/etc/modprobe.d/disable-algif-aead.confを介してalgif_aeadをブラックリスト化し、モジュールをアンロードします。完全な修正にはカーネルアップデートが依然として必要です。
os.spliceが必要)uvsudo / root — 緩和策の適用に必要(/etc/modprobe.dへの書き込みと)。検出のみは非特権で実行できますが、スクリプトはパッチを適用するかどうかを対話的に尋ねますrmmodsudo $(which uv) run --python 3.10 /path/to/copy_fail_test.py
$(which uv)は、sudoがPATH上の正しいuvバイナリを保持するようにするために使用されます。
スクリプトは次のことを行います:
AF_ALG + authencesn(hmac(sha256),cbc(aes))が到達可能かどうかを調査します。✅ NOT VULNERABLE — 終了コード0🚨 VULNERABLE — 緩和策の適用を促し、その後再テストします⚠️ INCONCLUSIVE — 終了コード2(例:splice/sendmsg呼び出しがエラーになった場合)プロンプトを受け入れると、スクリプトは次のことを行います:
install algif_aead /bin/falseを/etc/modprobe.d/disable-algif-aead.confに書き込みます。rmmod algif_aeadを実行します。モジュールがカーネルに組み込まれている場合(ロード可能でない場合)、ブラックリストを有効にするには再起動が必要です。いずれの場合も、アップデートが利用可能になったらカーネルにパッチを適用してください — ブラックリストは1つのエントリポイントを削除するだけです。
手動での同等の操作:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
検出手順は、自身が作成してから削除するtempfile.NamedTemporaryFileに書き込みます。システムファイルには一切触れません。緩和手順のみがホストを変更する部分であり、プロンプトで確認した場合にのみ実行されます。