algif_aead 模块,即内核 userspace crypto API 的 AEAD socket 接口(AF_ALG)。该漏洞可通过 AF_ALG + splice() 影响内核 page cache,攻击者在已能于节点上执行用户态代码的前提下,可能进一步提权至节点 root,或产生跨容器影响(同一宿主机上的进程共享内核 page cache)。Linux kernel 社区对该漏洞的修复描述为:crypto: algif_aead - Revert to operating out-of-place。CONFIG_CRYPTO_USER_API_AEAD=m 或 =y 编译配置、且尚未应用 CVE-2026-31431 修复补丁的版本。CONFIG_CRYPTO_USER_API_AEAD=n(未编译该模块),则天然免疫,无需操作。集群类型 | 风险说明 |
多租户集群 | 不可信用户可提交 Pod,风险高 |
CI/CD Runner 集群 | 构建任务通常执行不可信代码,风险高 |
在线业务混部集群 | 单业务容器被攻破后可能影响整节点 |
开放 exec / debug 权限的集群 | 攻击者更容易获得容器内代码执行能力 |
运行高权限 Pod 的集群 | 漏洞利用后横向风险更大 |
GPU / MaaS 推理集群 | 通常承载第三方模型、代码、插件或用户任务,需要重点评估 |
algif_aead,整体风险较低。临时缓解通过 DaemonSet 写入 /etc/modprobe.d 黑名单并卸载模块。该 DaemonSet 须使用高权限(hostPID/hostNetwork/privileged),属于节点级高危变更,必须先 canary 后全量。uname -rlsmod | grep '^algif_aead' || echo "algif_aead not loaded"modinfo algif_aead 2>/dev/null || echo "algif_aead module not found or built-in"test -f /etc/modprobe.d/blacklist-algif_aead.conf && \\cat /etc/modprobe.d/blacklist-algif_aead.conf || \\echo "blacklist config not found"
检查结果 | 结论 |
lsmod 能看到 algif_aead | 当前运行态存在风险,需要卸载 |
配置文件不存在 | 重启后仍可能被自动加载,需要修复 |
只有 blacklist algif_aead | 建议增强为 install algif_aead /bin/false |
modinfo 查不到,但功能仍存在 | 可能是 built-in 或路径差异,需要进一步确认 |
模块正在被使用,无法卸载 | 需结合业务评估,可能要通过节点重启生效 |
kubectl label node <node-1> algif-aead-fix=canarykubectl label node <node-2> algif-aead-fix=canary
disable-algif-aead-canary.yaml 并部署 Canary DaemonSet:apiVersion: apps/v1kind: DaemonSetmetadata:name: disable-algif-aeadnamespace: kube-systemlabels:app: disable-algif-aeadspec:selector:matchLabels:app: disable-algif-aeadupdateStrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1template:metadata:labels:app: disable-algif-aeadspec:hostPID: truehostNetwork: truetolerations:- operator: ExistsnodeSelector:algif-aead-fix: canaryrestartPolicy: Alwayscontainers:- name: disable-algif-aeadimage: busybox:1.36imagePullPolicy: IfNotPresentsecurityContext:privileged: truevolumeMounts:- name: host-rootmountPath: /hostreadOnly: falsecommand:- /bin/sh- -c- |set -euMODULE="algif_aead"CONF="/host/etc/modprobe.d/blacklist-algif_aead.conf"STATE_DIR="/host/var/lib/cve-2026-3143"STATE_FILE="${STATE_DIR}/pre-fix-state.json"ROLLBACK_DONE="${STATE_DIR}/rollback-done"echo "[INFO] node=$(hostname) start precheck"mkdir -p /host/etc/modprobe.dmkdir -p "${STATE_DIR}"# ========== 清理上一次回滚标记(支持反复 disable/rollback) ==========if [ -f "${ROLLBACK_DONE}" ]; thenecho "[FIX] clearing previous rollback marker"rm -f "${ROLLBACK_DONE}"fi# ========== 记录禁用前状态(用于回滚) ==========MODULE_LOADED="false"MODULE_LINE=""if grep -q "^${MODULE} " /proc/modules; thenMODULE_LOADED="true"MODULE_LINE=$(grep "^${MODULE} " /proc/modules)fiCONF_EXISTED="false"CONF_BACKUP=""if [ -f "${CONF}" ]; thenCONF_EXISTED="true"CONF_BACKUP=$(cat "${CONF}" 2>/dev/null || echo "")fi# 仅首次执行时写入状态文件,避免重复运行覆盖原始状态if [ ! -f "${STATE_FILE}" ]; thencat > "${STATE_FILE}" <<SNAP{"timestamp": "$(date -u '+%Y-%m-%dT%H:%M:%SZ')","hostname": "$(hostname)","kernel": "$(uname -r)","module_was_loaded": ${MODULE_LOADED},"module_proc_line": "${MODULE_LINE}","blacklist_conf_existed": ${CONF_EXISTED},"blacklist_conf_backup": "${CONF_BACKUP}","cve": "CVE-2026-3143"}SNAPchmod 0644 "${STATE_FILE}"echo "[STATE] pre-fix state saved to ${STATE_FILE}"elseecho "[STATE] state file already exists, skip (idempotent)"fiecho "[STATE] recorded state:"cat "${STATE_FILE}"# ========== Precheck ==========if [ "${MODULE_LOADED}" = "true" ]; thenecho "[PRECHECK] ${MODULE} is loaded: ${MODULE_LINE}"elseecho "[PRECHECK] ${MODULE} is not loaded"fiif [ "${CONF_EXISTED}" = "true" ]; thenecho "[PRECHECK] existing config:"echo "${CONF_BACKUP}"elseecho "[PRECHECK] config not found"fi# ========== Fix ==========echo "[FIX] writing blacklist config"cat > "${CONF}" <<EOF# Managed by TKE DaemonSet disable-algif-aead# CVE: CVE-2026-3143blacklist algif_aeadinstall algif_aead /bin/falseEOFchmod 0644 "${CONF}"syncecho "[FIX] try to unload ${MODULE}"if grep -q "^${MODULE} " /proc/modules; thenif chroot /host /sbin/modprobe -r "${MODULE}" 2>/tmp/modprobe-r.err; thenecho "[FIX] modprobe -r ${MODULE} succeeded"elseecho "[WARN] modprobe -r failed:"cat /tmp/modprobe-r.err || trueif chroot /host /sbin/rmmod "${MODULE}" 2>/tmp/rmmod.err; thenecho "[FIX] rmmod ${MODULE} succeeded"elseecho "[ERROR] failed to unload ${MODULE}:"cat /tmp/rmmod.err || truefifielseecho "[FIX] ${MODULE} is not loaded, skip unload"fi# ========== Postcheck ==========echo "[POSTCHECK] config:"cat "${CONF}"if grep -q "^${MODULE} " /proc/modules; thenecho "[POSTCHECK][FAIL] ${MODULE} is still loaded"elseecho "[POSTCHECK][OK] ${MODULE} is not loaded"fiwhile true; dosleep 3600donevolumes:- name: host-roothostPath:path: /type: Directory
kubectl apply -f disable-algif-aead-canary.yaml# 观察(成功标准:日志出现 [POSTCHECK][OK] algif_aead is not loaded)kubectl -n kube-system get pod -l app=disable-algif-aead -o widekubectl -n kube-system logs -l app=disable-algif-aead --tail=50
nodeSelector 段,全量 apply:kubectl apply -f disable-algif-aead.yamlkubectl -n kube-system rollout status ds/disable-algif-aead --timeout=10mkubectl -n kube-system get ds disable-algif-aead
# DaemonSet 状态(期望 DESIRED = READY)kubectl -n kube-system get ds disable-algif-aead# 日志检查(成功标准: [POSTCHECK][OK] algif_aead is not loaded)kubectl -n kube-system logs -l app=disable-algif-aead --tail=300 | grep -E "POSTCHECK|ERROR|WARN|FAIL|OK"# 抽样检查宿主机配置POD=$(kubectl -n kube-system get pod -l app=disable-algif-aead -o jsonpath='{.items[0].metadata.name}')kubectl -n kube-system exec "$POD" -- cat /host/etc/modprobe.d/blacklist-algif_aead.confkubectl -n kube-system exec "$POD" -- grep '^algif_aead ' /proc/modules || echo "not loaded - OK"# 节点与业务状态kubectl get nodeskubectl get events -A --sort-by='.lastTimestamp' | tail -100
NodeNotReady / MemoryPressure / DiskPressure / PIDPressure / NetworkUnavailable / FailedCreatePodSandBox / FailedMount,以及业务层面的 Pod 重启、错误率、CNI/DNS 连通性、存储挂载、GPU 调度(含 NVIDIA device plugin)是否正常;若有自研加密组件、IPsec 或依赖内核 crypto API 的场景,需额外确认。rmmod: ERROR: Module algif_aead is in use),不要强制破坏业务进程,确认配置文件已写入后记录该节点为"已配置未卸载",业务低峰重启或替换节点。若日志出现 [POSTCHECK][FAIL] algif_aead is still loaded,说明配置已落盘但运行态卸载失败,常见原因包括:模块正在被使用、模块为 built-in、节点缺少 modprobe/rmmod、安全策略阻止卸载。k8sPSPPrivilegedContainer、k8sPSPHostNamespace、k8sPSPHostNetworkingPorts 限制,修复完成后恢复。kubectl describe node <node-name>kubectl get events -A --sort-by='.lastTimestamp' | tail -200# 关键业务节点:先驱逐kubectl cordon <node-name>kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
kubectl -n kube-system delete ds disable-algif-aead
algif_aead、检查业务恢复情况。注意删除 DaemonSet 只会删除 Pod,不会自动删除宿主机上的配置文件,需通过以下回滚 DaemonSet 清理。rollback-algif-aead.yaml 并执行:apiVersion: apps/v1kind: DaemonSetmetadata:name: rollback-algif-aeadnamespace: kube-systemlabels:app: rollback-algif-aeadspec:selector:matchLabels:app: rollback-algif-aeadupdateStrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1template:metadata:labels:app: rollback-algif-aeadspec:hostPID: truehostNetwork: truetolerations:- operator: ExistsrestartPolicy: Alwayscontainers:- name: rollback-algif-aeadimage: busybox:1.36imagePullPolicy: IfNotPresentsecurityContext:privileged: truevolumeMounts:- name: host-rootmountPath: /hostreadOnly: falsecommand:- /bin/sh- -c- |set -euMODULE="algif_aead"CONF="/host/etc/modprobe.d/blacklist-algif_aead.conf"echo "[ROLLBACK] node=$(hostname) start rollback"if [ -f "${CONF}" ]; thenecho "[ROLLBACK] remove ${CONF}"rm -f "${CONF}"syncelseecho "[ROLLBACK] config not found, skip"fiecho "[ROLLBACK] try to reload ${MODULE}, optional"if grep -q "^${MODULE} " /proc/modules; thenecho "[ROLLBACK] ${MODULE} already loaded"elseif chroot /host /sbin/modprobe "${MODULE}" 2>/tmp/modprobe.err; thenecho "[ROLLBACK] modprobe ${MODULE} succeeded"elseecho "[WARN] modprobe ${MODULE} failed; module may be unavailable or not required"cat /tmp/modprobe.err || truefifiif [ -f "${CONF}" ]; thenecho "[POSTCHECK][FAIL] config still exists"elseecho "[POSTCHECK][OK] config removed"fiif grep -q "^${MODULE} " /proc/modules; thenecho "[POSTCHECK] ${MODULE} is loaded"elseecho "[POSTCHECK] ${MODULE} is not loaded"fiwhile true; dosleep 3600donevolumes:- name: host-roothostPath:path: /type: Directory
kubectl apply -f rollback-algif-aead.yaml# 观察kubectl -n kube-system get pod -l app=rollback-algif-aead -o widekubectl -n kube-system logs -l app=rollback-algif-aead --tail=200# 成功后清理kubectl -n kube-system delete ds rollback-algif-aead
algif_aead 模块,整体风险较低。注册节点需用户自行评估。algif_aead。如有自研内核加密组件或 IPsec 场景,需先灰度验证。install algif_aead /bin/false,而不是只写 blacklist?blacklist 主要阻止自动加载,install algif_aead /bin/false 进一步阻止手动 modprobe,两者同时配置安全加固效果更强。/etc/modprobe.d 并执行内核模块卸载,没有 privileged 和宿主机根目录挂载无法完成操作。k8sPSPPrivilegedContainer、k8sPSPHostNamespace、k8sPSPHostNetworkingPorts 且未豁免 kube-system,需先临时放开 kube-system 命名空间,修复完成后恢复。超级节点方案不受此限制影响。文档反馈