CVE-2026-31431 は、Linux カーネルにおける深刻度の高いローカル権限昇格の脆弱性です。このドキュメントでは、ライブパッチ RPM を使用して再起動せずに AF_ALG ソケットの作成を無効化することで、暫定的な緩和策を適用する方法について説明します。この緩和策は、お使いのサービスが AF_ALG ソケットに依存していない場合にのみ適用してください。
-
このソリューションをデプロイすると、
AF_ALGソケットに依存するプロセスがソケットを作成できなくなり、サービスが利用不可になる可能性があります。ご使用のサービスがAF_ALGソケットに依存していないことが確実な場合を除き、このソリューションをデプロイしないでください。 -
このソリューションには、安定性に関するリスクが伴います。段階的なアプローチを用いて徐々に展開し、一度に本番環境全体へデプロイしないでください。
-
段階的な展開中は、サービスの安定性、エラーログ、パフォーマンスメトリックを注意深く監視してください。異常を検知した場合は、直ちにロールバックしてください。
背景情報
CVE-2026-31431 は、Linux カーネルの algif_aead モジュールにおける、深刻度の高いローカル権限昇格の脆弱性です。
攻撃者は、特定のシーケンスの AF_ALG ソケットコールと splice() システムコールを組み合わせることで、標準的な権限チェックをバイパスし、任意のファイルのページキャッシュに対して 4 バイトの不正な書き込みを実行できます。攻撃者はこれを悪用して、/usr/bin/su などの setuid プログラムのメモリ内イメージを改ざんし、ディスク上のファイルコンテンツを変更することなく、一般ユーザーから root へと権限を昇格させます。
詳細については、「[セキュリティアドバイザリ] Linux カーネルにおけるローカル権限昇格の脆弱性のリスク (CVE-2023-31436)」をご参照ください。
制限事項
この緩和策は、カーネルレベルで AF_ALG ソケットを使用するすべての暗号化および復号化の操作を無効化します。これらの操作に依存するサービスは動作しなくなります。この緩和策を適用する前に、お使いのサービスが AF_ALG ソケットに依存しているかどうかを確認してください。お使いのサービスが AF_ALG ソケット機能に依存しているかどうかが不明な場合は、続行しないでください。
サービスがカーネルレベルの暗号化操作に AF_ALG ソケットを使用しているかどうかを確認するには、auditd または eBPF (extended Berkeley Packet Filter) を使用して AF_ALG ソケットの作成を監視します。 次の例では auditd を使用します:
# まず、auditd サービスが有効になっていることを確認します。
systemctl start auditd
# システムに他の監査ルールがすでに設定されている場合は、まずそれらをバックアップし、影響を評価します。
# AF_ALG ソケットの監査ルールを追加します。
auditctl -a always,exit -F arch=b64 -S socket -F a0=38 -k afalg_socket
# しばらくしてから、監査結果を確認します。
ausearch -k afalg_socket -ts recent -i
# 期待される結果:この期間中にいずれかのプロセスが AF_ALG ソケットを作成した場合、監査レコードが表示されます。
# 終了したら、AF_ALG ソケットの監査ルールを削除します。
auditctl -d always,exit -F arch=b64 -S socket -F a0=38 -k afalg_socket
これらのチェックはあくまで参考用であり、AF_ALG への依存関係を完全に排除することはできません。あわせて、アプリケーションのソースコード、依存関係リスト、およびランタイムの動作も確認してください。
緩和策の適用
先に進む前に、お使いのサービスが AF_ALG ソケット機能に依存していないこと、および AF_ALG 関連機能の制限を許容できることを確認してください。
ステップ 1:前提条件の確認
デプロイする前に、システムが以下の両方の条件を満たしていることを確認してください:
-
カーネルでライブパッチのサポートが有効になっている。
-
現在のカーネルバージョンに対応する kernel-devel パッケージがインストールされている。
# 1. 実行中のカーネルに対応する kernel-devel パッケージがインストールされているか確認します。
test -d "/lib/modules/$(uname -r)/build" && echo "kernel-devel OK" || echo "Please install kernel-devel-$(uname -r)"
# パッケージが見つからない場合は、インストールします:
sudo yum install -y kernel-devel-$(uname -r)
# 2. カーネルでライブパッチのサポートが有効になっているか確認します。
test -d /sys/kernel/livepatch && echo "livepatch sysfs OK"
ステップ 2:RPM パッケージのインストール
# 1. ご利用のオペレーティングシステムのバージョンに対応する RPM パッケージをダウンロードします。 (ダウンロードリンクは許可リストで保護されています。承認済みリンクを取得するには、DingTalk グループ 179525012975 にご参加ください。)
# 2. RPM パッケージをインストールします。例:Alibaba Cloud Linux 3 の場合
sudo yum install disable-af-alg-livepatch-1.0.0-1.al8.noarch.rpm
カーネルを更新した場合は、緩和策を有効に保つために、対応する RPM パッケージを再インストールしてください。
ステップ 3:緩和策の検証
方法 1:ライブパッチのステータス確認
この方法は、Alibaba Cloud Linux 3 および Alibaba Cloud Linux 4 に適用されます:
# ライブパッチのステータスを確認します。
kpatch list
# 期待される出力:「Loaded patch modules:」リストに「disable_af_alg [enabled]」が表示されます。
方法 2:AF_ALG ソケットブロッキングの検証
次の Python スクリプトを実行して、AF_ALG ソケットの作成がブロックされていることを確認します:
python3 - <<'PY'
import socket, errno
try:
s = socket.socket(38, socket.SOCK_SEQPACKET, 0) # 38 は AF_ALG を意味します
print("AF_ALG socket create: SUCCESS (Mitigation is not effective)")
s.close()
except OSError as e:
if e.errno == errno.EAFNOSUPPORT:
print(f"AF_ALG socket create: FAILED (Mitigation is effective)")
else:
print(f"AF_ALG socket create: FAILED (Unexpected error),errno={e.errno}, msg={e.strerror}")
PY
ロールバック
デプロイ後にサービスで問題が発生した場合は、以下の手順で緩和策をアンインストールします:
sudo yum remove disable-af-alg-livepatch
アンインストール後、検証スクリプトを実行して、AF_ALG ソケットインターセプションが削除されていることを確認します。