
Kubernetes DaemonSet を使用して CVE-2026-31431 (GHSA-2274-3hgr-wxv6) を検出および修復する — modprobe ブラックリストによる algif_aead LPE
深刻度: 高 (CVSS 7.8 — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
CVE-2026-31431 は、Linuxカーネルの algif_aead モジュール(AF_ALG AEAD暗号ソケットインターフェース)におけるローカル権限昇格の脆弱性です。低権限のローカルユーザーが、不正確なインプレースバッファ操作を悪用して完全なrootアクセスを取得できます。上流パッチより前のLinuxカーネルを実行しているすべてのAKSノードプールが影響を受ける可能性があります。
algif_aead モジュールは、通常のKubernetesまたはAKSワークロードには必要ありません。ブラックリストに登録することで、攻撃対象領域を完全に排除できます。
各Linuxノードで1つのポッドが実行されます。起動時およびその後60秒ごとに、各ポッドは次の処理を行います:
書き込み: ホスト上の /etc/modprobe.d/modprobe-CIS.conf に以下を書き込みます:
install algif_aead /bin/false
blacklist algif_aead
これにより、再起動時や modprobe によるモジュールの読み込みが防止されます。
確認: /proc/modules(すべてのコンテナと共有されるライブホストカーネルモジュールリスト)で algif_aead を確認します。
ラベル付け: 結果をKubernetesノードにラベル付けし、クラスター全体でクエリできるようにします:
| ラベル値 | 意味 |
|---|---|
mitigated | モジュールが読み込まれていない。ブラックリスト設定が適用済み |
module-loaded | モジュールが現在読み込まれている — 直ちに調査が必要 |
| ファイル | 目的 |
|---|---|
rbac.yaml | Namespace、ServiceAccount、ClusterRole(ノードの get/patch)、ClusterRoleBinding |
configmap.yaml |
kubectlマニフェストを順番に適用します:
kubectl apply -f rbac.yaml
kubectl apply -f configmap.yaml
kubectl apply -f daemonset.yaml
すべてのノードでロールアウトが完了するのを待ちます:
kubectl -n security-remediation rollout status daemonset/cve-2026-31431-remediator
kubectl get nodes -L vulnerability.aks.io/CVE-2026-31431
正常なクラスターでの期待される出力:
NAME STATUS ROLES AGE VERSION CVE-2026-31431
aks-nodepool1-xxxxx-vmss000000 Ready <none> 4d v1.33.7 mitigated
aks-nodepool1-xxxxx-vmss000001 Ready <none> 4d v1.33.7 mitigated
# ポッドと割り当てられたノードを一覧表示
kubectl -n security-remediation get pods -o wide
# 特定のポッドのログを追跡
kubectl -n security-remediation logs <pod-name> -f
期待されるログ出力:
2026-05-01T01:33:36Z [INFO ] CVE-2026-31431 remediator starting on node: aks-nodepool1-...
2026-05-01T01:33:36Z [INFO ] Blacklist config written → /host/etc/modprobe.d/modprobe-CIS.conf
2026-05-01T01:33:36Z [INFO ] Node aks-nodepool1-...: 'algif_aead' is NOT loaded — blacklist config applied, node is mitigated.
2026-05-01T01:33:36Z [INFO ] Labeled node aks-nodepool1-...: vulnerability.aks.io/CVE-2026-31431=mitigated
2026-05-01T01:33:36Z [INFO ] Entering monitoring loop (interval: 60s)
kubectl -n security-remediation exec <pod-name> -- cat /host/etc/modprobe.d/modprobe-CIS.conf
期待される内容:
# CIS hardening – mitigate CVE-2026-31431 (GHSA-2274-3hgr-wxv6)
# Prevents algif_aead (AF_ALG AEAD) LPE from being loaded or exploited.
install algif_aead /bin/false
blacklist algif_aead
ノードが module-loaded を表示している場合、カーネルモジュールが現在アクティブであり、ノードがすでに侵害されている可能性があります。フォレンジック分析のため、ノードを直ちにcordonおよびdrainしてください:
# 影響を受けるノードを検索
kubectl get nodes -l vulnerability.aks.io/CVE-2026-31431=module-loaded
# 調査のためcordonおよびdrain
kubectl cordon <node-name>
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
注: DaemonSetを削除しても、ホストノードから
/etc/modprobe.d/modprobe-CIS.confファイルは削除されません。このファイルは永続的なカーネル強化策として意図的に残されます。
kubectl delete -f daemonset.yaml
kubectl delete -f configmap.yaml
kubectl delete -f rbac.yaml
これにより、DaemonSet、そのすべてのポッド、ConfigMap、ServiceAccount、ClusterRole、ClusterRoleBinding、およびNamespaceが削除されます。
kubectl label nodes --all vulnerability.aks.io/CVE-2026-31431-
代替の緩和策(パッチ適用済みカーネル)がある場合のみ実行してください。各ノードまたは特権ポッド経由で実行します:
rm -f /etc/modprobe.d/modprobe-CIS.conf
runAsUser: 0)として実行されます — ホスト上の /etc/modprobe.d/ への書き込みに必要です。capabilities.drop: ["ALL"])。カーネルケーパビリティは不要です。readOnlyRootFilesystem: true で実行されます。マウントされた hostPath と emptyDir ボリュームのみが書き込み可能です。/etc/modprobe.d/ のみです — /etc、/proc、またはそれより広いパスはマウントされません。curl バイナリとその共有ライブラリは、initコンテナによって emptyDir(/tools)にステージングされ、メインコンテナがrootfsへの書き込みアクセスを必要とせずにKubernetes APIを呼び出せるようにします。get と のみ。| すべてのポッドにマウントされるシェル修復スクリプト |
daemonset.yaml | DaemonSet定義 — Linuxノードごとに1ポッド |
patch