Linuxカーネルの暗号化機能を利用するAPI(AF_ALG)において、ローカル特権昇格の脆弱性(CVE-2026-31431)が発見されました。本脆弱性は、非特権のローカルユーザーがroot権限を取得可能な極めて深刻な問題です。2026年4月29日に公開された本脆弱性について、弊社サーバ製品の対応状況と対処方法をご案内いたします。
詳細については以下URLをご確認ください。
Linuxカーネルの暗号ソケットインターフェース(algif_aead)において、in-place操作の設計不備により、非特権ユーザーが任意のファイルのページキャッシュを4バイト書き換え可能な脆弱性が存在します。この脆弱性を悪用することで、setuidバイナリのページキャッシュを改ざんし、root権限を取得することができます。
本脆弱性は、競合状態やカーネルバージョン依存のオフセット特定を必要としない直線的な論理バグであり、732バイトのPythonスクリプトで全ディストリビューションにおいて確実にroot権限を取得可能であることが実証されています。
2017年のコミット(72548b093ee3)以降、修正コミット(a664bf3d603d)が適用されるまでの期間にビルドされたLinuxカーネルが対象となります。
| バージョン | 対象カーネル | パッチ済みカーネル | 暫定対処 | パッチ提供状況 |
|---|---|---|---|---|
| 24.04 LTS | 6.8.0-110-generic以前 | 未リリース | あり(モジュール無効化) | 標準サポート内 |
| 22.04 LTS | 5.15.0-176-generic以前 | 未リリース | あり(モジュール無効化) | 標準サポート内 |
| 20.04 LTS | 5.4.0-228-generic以前 | リリースされません | あり(モジュール無効化) | ESM期間(パッチ提供終了) |
Ubuntuの全バージョンにおいて、algif_aeadはカーネルモジュール(CONFIG_CRYPTO_USER_API_AEAD=m)としてビルドされているため、modprobe.dによるモジュール無効化が可能です。
Ubuntu 20.04 LTSは2025年5月に標準サポートが終了し、現在はESM(Extended Security Maintenance)期間です。標準サポートでのカーネルパッチ提供は終了しており、根本的な対応にはUbuntu 24.04 LTS以降へのアップグレードを推奨します。
| 項目 | 状況 |
|---|---|
| パッチ済みカーネル | 未リリース |
| 暫定対処 | あり(ブートパラメータによるalgif_aead無効化・Red Hat公式緩和策) |
| Red Hat CVEステータス | Affected |
RHEL 8/9では、CONFIG_CRYPTO_USER_API_AEAD=y(カーネル組み込み)としてビルドされているため、modprobe.dによるモジュール無効化は機能しません。Red Hatが公開したブートパラメータによる緩和策が利用可能です(詳細は「対処方法」セクションを参照)。
修正提供対象外のバージョン(8.7、8.9等)をご利用の場合で、正式なパッチの適用を検討される必要がある方はOSのアップグレードが必要です。RHEL 8の場合は8.10への、RHEL 9の場合は9.6以降へのアップグレードを推奨します。
Red Hatの公式CVEページでは本脆弱性の暫定対処としてブートパラメータによる緩和策が公開されています(https://access.redhat.com/security/cve/cve-2026-31431)。パッチ済みカーネルのリリース状況はRed HatのErrataページ(https://access.redhat.com/errata/)で確認してください。
影響対象外(Not affected)です。カーネルにCONFIG_CRYPTO_USER_API_AEADが含まれていないため、脆弱性の前提となるコードパスが存在しません。
パッチ済みカーネルがリリースされるまでの間、以下の手順でalgif_aeadモジュールを無効化することにより、脆弱性の悪用を防止できます。
(1)モジュール無効化設定の作成
rootで計算機にログインし、以下のコマンドを実行してください。
# echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
(2)現在ロードされているモジュールの削除
# rmmod algif_aead 2>/dev/null || true
(3)無効化の確認
以下のコマンドを実行し、モジュールがロードされていないことを確認してください。
# lsmod | grep algif
# modprobe algif_aead
modprobe: ERROR: could not insert 'algif_aead': Operation not permitted
上記のようにエラーが返されれば、無効化は正常に機能しています。
(4)AF_ALGを使用するプロセスの確認
本暫定対処は、dm-crypt/LUKS、IPsec/XFRM、kTLS、OpenSSH、OpenSSL等のデフォルト設定には影響しません。AF_ALGを明示的に使用するプロセスが存在しないか、以下のコマンドで確認してください。
# lsof | grep AF_ALG
何も出力されなければ、暫定対処による影響はありません。
OpenSSLのafalgエンジンを明示的に有効化している環境、またはAF_ALGソケットを直接バインドするアプリケーションでは、algif_aeadの無効化により影響を受ける可能性があります。該当する場合は、ユーザー空間の暗号ライブラリ(OpenSSLのデフォルトエンジン等)へのフォールバックが自動的に行われます。
Canonicalからパッチ済みカーネルがリリースされ次第、この章に加筆します。
RHELではalgif_aeadがカーネル組み込み(CONFIG_CRYPTO_USER_API_AEAD=y)であるため、Ubuntuのようなmodprobe.dによるモジュール無効化はできません。Red Hatが公式に公開したブートパラメータによる緩和策が利用可能です(https://access.redhat.com/security/cve/CVE-2026-31431)。
以下のいずれかのブートパラメータを追加することで、影響を受ける機能を無効化できます。
| ブートパラメータ | 効果 | 影響範囲 |
|---|---|---|
initcall_blacklist=algif_aead_init |
algif_aeadのみ無効化 | 最小限。AF_ALGの他機能(hash/skcipher/rng)は動作 |
initcall_blacklist=af_alg_init |
AF_ALGインターフェース全体を無効化 | 広範。AF_ALGを使用する全機能が動作不可 |
initcall_blacklist=crypto_authenc_esn_module_init |
authencesnアルゴリズムのみ無効化 | 最小限。脆弱性のトリガーとなるアルゴリズムのみブロック |
推奨はinitcall_blacklist=algif_aead_initです。脆弱性の対象となるAEAD機能のみを無効化し、AF_ALGの他機能への影響を最小限に抑えます。
(1)ブートパラメータの追加
rootで計算機にログインし、grubbyコマンドを使用して全カーネルにブートパラメータを追加します。BIOS/UEFIの区別は不要です。
# grubby --update-kernel ALL --args="initcall_blacklist=algif_aead_init"
(2)シンボリックリンクの強制作成(ここはRed Hat Enterprise Linux 9では不要)
# cd /boot/grub2
# ln -sf ../efi/EFI/*/grubenv
* の箇所は OS 依存です(almalinux, redhat, rocky 等)。シンボリックリンクが正しく設置されていない場合、起動時に正常なパラメータで起動出来ない場合があります。
(3)grub.cfgの更新(ここはRed Hat Enterprise Linux 9では不要)
# grub2-mkconfig -o /boot/efi/EFI/*/grub.cfg
(4)再起動
# reboot
(5)確認
再起動後、ブートパラメータが反映されていることを確認します。
# cat /proc/cmdline | grep initcall_blacklist
また、AF_ALGのAEAD機能が無効化されていることを確認します。
# python3 -c "import socket; s=socket.socket(38,5,0); s.bind(('aead','authencesn(hmac(sha256),cbc(aes))'))" 2>&1
エラーが返されれば、AEAD機能は正常に無効化されています。
crypto_authenc_esn_module_initを指定する場合、IPsecのESN機能に影響する可能性があります。Red Hatからパッチ済みカーネルがリリースされ次第、この章に加筆します。
平日9:30~17:30(土曜日、日曜日、祝祭日、年末年始、夏期休暇は、休日とさせていただきます。)