
LinuxシステムがCVE-2026-31431(Copy Fail)の脆弱性、Linuxカーネルにおけるローカル権限昇格の影響を受けるかどうかを検証するPythonスクリプトです。
2017年(コミット 72548b093ee3)以降、カーネルの暗号モジュール algif_aead はインプレース操作を誤って処理しています。splice() を介して、非特権ユーザーがsetuidバイナリのページキャッシュを破壊し、ディスクに触れることなく root権限を取得できます。
| # | 検証項目 |
|---|---|
| 1 | カーネルバージョン(脆弱な範囲) |
| 2 | algif_aead モジュールがロード済みまたはロード可能か |
| 3 | AF_ALG SOCK_SEQPACKET ソケットが権限なしでアクセス可能か |
| 4 | os.splice() が利用可能か(直接的なPythonエクスプロイト) |
| 5 | 全ユーザーが読み取り可能なsetuidバイナリ(sudo、passwd など) |
| 6 | 有効な保護機能(SELinux、AppArmor、modprobeブラックリスト) |
python3 check_cve_2026_31431.py
外部依存関係はありません。root権限なしで動作します。
このスクリプトはシステムの分析のみを行います。脆弱性を悪用せず、モジュールをロードせず、ディスクに何も書き込みません。
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/algif_aead-block.conf
この回避策はRHEL系ディストリビューションでは機能しません(モジュールがカーネルに組み込まれています)。