严重性: 高危(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 节点上运行一个 Pod。在启动时以及之后每 60 秒,每个 Pod 会:
写入 主机上的 /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 | 命名空间、ServiceAccount、ClusterRole(get/patch 节点)、ClusterRoleBinding |
configmap.yaml | 挂载到每个 Pod 中的 Shell 修复脚本 |
kubectl 已配置指向目标 AKS 集群按顺序应用清单:
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
# 列出 Pod 及其分配的节点
kubectl -n security-remediation get pods -o wide
# 跟踪特定 Pod 的日志
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、其所有 Pod、ConfigMap、ServiceAccount、ClusterRole、ClusterRoleBinding 以及命名空间。
kubectl label nodes --all vulnerability.aks.io/CVE-2026-31431-
仅当您有替代缓解措施(已修补的内核)时才执行此操作。在每个节点上或通过特权 Pod 运行:
rm -f /etc/modprobe.d/modprobe-CIS.conf
runAsUser: 0)——这是写入主机 /etc/modprobe.d/ 所必需的。capabilities.drop: ["ALL"])。不需要任何内核 capabilities。readOnlyRootFilesystem: true 运行。只有挂载的 hostPath 和 emptyDir 卷是可写的。/etc/modprobe.d/——而非 /etc、/proc 或任何更广泛的路径。curl 二进制文件及其共享库由 init 容器暂存到 emptyDir(/tools)中,以便主容器无需对 rootfs 的写访问权限即可调用 Kubernetes API。nodes 的 get 和 。daemonset.yaml | DaemonSet 定义——每个 Linux 节点一个 Pod |
patch