背景
本次涉及两个 Linux 内核本地提权漏洞,均属于「Dirty Frag」页缓存篡改(Page Cache Corruption)漏洞类。攻击者在满足相应条件后,可通过零拷贝路径中的解密操作就地篡改只读文件的内存内容,从而实现本地提权。两条漏洞链在内核中彼此独立,需分别处置。
CVE-2026-43284:问题位于 Linux 内核 xfrm 子系统的
esp4 / esp6 模块(IPsec ESP 协议)。MSG_SPLICE_PAGES 可将 pipe 页直接附加到 skb,而 IPv4/IPv6 datagram append 路径未设置 SKBFL_SHARED_FRAG 标志,导致 ESP 输入路径在共享页缓存上执行原地 AES-GCM 解密,直接篡改目标文件内存。漏洞代码路径位于 authenc/authencesn AEAD 模板内,CONFIG_CRYPTO_AUTHENC=n 时代码路径不存在,节点天然免疫。CVE-2026-43500:问题位于 Linux 内核
rxrpc.ko 模块(AFS 分布式文件系统协议)。攻击者通过 add_key 系统调用注册会话密钥,使 RxRPC 数据包解密路径以页缓存页同时作为输入和输出缓冲区,将可控的 8 字节数据就地覆写至只读文件内存。漏洞代码路径位于 rxkad(Kerberos 安全机制)内,CONFIG_RXKAD=n 时代码路径不存在,节点天然免疫。影响范围
CVE-2026-43284(xfrm esp4/esp6)
受影响版本:
Linux 内核:
CONFIG_CRYPTO_AUTHENC 已启用(=m 或 =y)、且尚未应用 CVE-2026-43284 修复补丁的版本。TKE 节点:运行上述受影响内核版本的普通节点、原生节点、超级节点。
注册节点:操作系统由用户自行控制,需用户自行评估内核版本及风险。
说明:
若内核编译时
CONFIG_CRYPTO_AUTHENC=n,则漏洞代码路径不存在,节点天然免疫,无需任何操作。可通过以下命令确认:grep CONFIG_CRYPTO_AUTHENC /boot/config-$(uname -r)
攻击条件:
CVE-2026-43284 的攻击条件较为严格,攻击者需同时满足以下两个条件:
1. 具备本地普通用户权限或容器内代码执行权限;
2. 具备创建用户命名空间的权限(
unshare(CLONE_NEWUSER),部分发行版安全策略可能已限制此操作)。该漏洞不可远程直接利用。
CVE-2026-43500(rxrpc)
受影响版本:
Linux 内核:
CONFIG_AF_RXRPC 已编译(=m 或 =y)且 CONFIG_RXKAD=y、并尚未应用 CVE-2026-43500 修复补丁的版本。TKE 节点:运行上述受影响内核版本的普通节点、原生节点、超级节点。
注册节点:操作系统由用户自行控制,需用户自行评估内核版本及风险。
说明:
CONFIG_RXKAD 在 TencentOS 内核配置中默认未启用,原生节点、超级节点天然不受影响,无需操作。普通节点与您使用的操作系统有关,请通过以下命令确认:grep CONFIG_RXKAD /boot/config-$(uname -r)# 若输出 "# CONFIG_RXKAD is not set" 或无输出,则天然免疫
攻击条件:
CVE-2026-43500 的攻击条件相对宽松,攻击者仅需具备本地普通用户权限或容器内代码执行权限,无需用户命名空间权限,相比 CVE-2026-43284 更容易被利用。
该漏洞不可远程直接利用。
影响自查
说明:
容器用户请联系主机运维管理人员,在主机上执行以下检查。
针对 CVE-2026-43284(xfrm-ESP):
# 查看 esp4/esp6 是否已加载(有输出则当前存在风险,需执行缓解措施)lsmod | grep -E '^esp4|^esp6'# 若未加载,进一步确认是否可能被自动加载(编译选项)cat /boot/config-$(uname -r) | grep -w CONFIG_CRYPTO_AUTHENCcat /boot/config-$(uname -r) | grep -w CONFIG_INET_ESPcat /boot/config-$(uname -r) | grep -w CONFIG_INET6_ESP# 若以上选项均为 is not set,则天然免疫,无需操作
检查结果 | 结论 |
lsmod 能看到 esp4 或 esp6 | 当前已暴露,需立即执行缓解措施 |
lsmod 无输出,且编译选项为 is not set | 天然免疫,无需操作 |
lsmod 无输出,但编译选项为 =m | 当前未加载,建议执行缓解以防被自动加载 |
针对 CVE-2026-43500(RxRPC):
# 查看 rxrpc 是否已加载(有输出则当前存在风险,需执行缓解措施)lsmod | grep '^rxrpc'# 若未加载,进一步确认是否可能被自动加载(编译选项)cat /boot/config-$(uname -r) | grep -w CONFIG_RXKAD# 若输出 "# CONFIG_RXKAD is not set" 或无输出,则天然免疫,无需操作
检查结果 | 结论 |
lsmod 能看到 rxrpc | 当前已暴露,需立即执行缓解措施 |
lsmod 无输出,且 CONFIG_RXKAD 为 is not set | 天然免疫,无需操作(TencentOS 默认) |
lsmod 无输出,但 CONFIG_RXKAD=y | 当前未加载,建议执行缓解以防被自动加载 |
修复建议
一、彻底修复(推荐)
不同节点类型的根治方案不同:
新建节点默认使用修复版本,天然不受此漏洞影响。
存量节点可通过置换节点完成根治:先对节点执行驱逐(drain)将业务 Pod 迁移至其他节点,再将旧节点移出集群,最后新建节点加入集群(新节点默认使用修复版本镜像)。
原生节点的操作系统由 TKE 统一管控。请关注 TKE 后续公告更新,在 TKE 发布包含修复补丁的节点镜像后:
新建节点默认使用修复版本,天然不受此漏洞影响。
存量节点可通过置换节点完成根治:先对节点执行驱逐(drain)将业务 Pod 迁移至其他节点,再将旧节点移出集群,最后新建节点加入集群(新节点默认使用修复版本镜像)。
超级节点的底层节点资源由 TKE 统一管控。请关注 TKE 后续公告更新,在 TKE 发布修复后:
新建 Pod 默认运行在修复版本的节点上,天然不受此漏洞影响。
存量 Pod 可通过重建 Pod(删除后由控制器重新调度)完成根治。
二、临时缓解(内核升级前)
临时缓解不能替代内核升级,请尽快完成彻底修复。
两个 CVE 的缓解方案相互独立,需分别部署。临时缓解通过 DaemonSet 写入
/etc/modprobe.d 禁用配置并卸载模块,该 DaemonSet 须使用高权限(hostPID/hostNetwork/privileged),属于节点级高危变更,必须先 Canary 后全量。注意:
CVE-2026-31431 部署的
algif_aead 黑名单对本次两个漏洞完全无效,需单独处置。CVE-2026-43284 缓解(禁用 esp4 / esp6)
注意:
禁用 esp4/esp6 将导致节点上所有依赖 IPsec ESP 的流量失效(包括 IPsec VPN、加密隧道等),执行前请确认节点及业务是否依赖此功能。
DaemonSet 在执行前会自动检查
CONFIG_CRYPTO_AUTHENC:若为 n,直接输出 NOT_AFFECTED 进入待机,无任何配置变更;若已启用,对 esp4/esp6 先尝试卸载,卸载成功后写入禁用配置。模块正在被业务使用时卸载失败不写入配置,避免重启后业务不可用。配置文件路径:
/etc/modprobe.d/block-cve-2026-43284.conf步骤1:单节点预检
uname -r# 检查漏洞前提grep CONFIG_CRYPTO_AUTHENC /boot/config-$(uname -r)# 检查 esp4/esp6 加载状态lsmod | grep -E '^esp4|^esp6' || echo "esp4/esp6 not loaded"# 确认是否有业务依赖 IPsec ESPip xfrm state listip xfrm policy list
检查结果 | 结论 |
CONFIG_CRYPTO_AUTHENC is not set | 天然免疫,无需操作 |
CONFIG_CRYPTO_AUTHENC=m/y 且 esp4/esp6 未加载 | 下发禁用配置即可 |
CONFIG_CRYPTO_AUTHENC=m/y 且 esp4/esp6 已加载 | 需先确认业务无 IPsec ESP 依赖,再执行卸载+配置(卸载失败则不落盘) |
esp4/esp6 为 built-in( =y) | modprobe 规则无效,需 kpatch 或重启到修复内核 |
也可直接以 root 用户在单节点上手动执行(无需 DaemonSet):
# 若模块未加载,直接写入禁用配置lsmod | grep -E '^esp4|^esp6' || \\sh -c "printf 'install esp4 /bin/false\\ninstall esp6 /bin/false\\n' > /etc/modprobe.d/block-cve-2026-43284.conf"# 若模块已加载,先卸载成功后再写入(卸载失败则不写,避免下次重启业务不可用)rmmod esp4 2>/dev/null && printf 'install esp4 /bin/false\\n' >> /etc/modprobe.d/block-cve-2026-43284.conf || echo "esp4 in use, skip"rmmod esp6 2>/dev/null && printf 'install esp6 /bin/false\\n' >> /etc/modprobe.d/block-cve-2026-43284.conf || echo "esp6 in use, skip"# 验证(期望 cat 有内容,grep 无回显)cat /etc/modprobe.d/block-cve-2026-43284.confcat /proc/modules | grep esp4cat /proc/modules | grep esp6
步骤2:选择 1~3 台低风险节点打标签,部署 Canary DaemonSet:
kubectl label node <node-1> cve-43284-fix=canarykubectl label node <node-2> cve-43284-fix=canary
保存为
disable-esp-canary.yaml 并部署:apiVersion: apps/v1kind: DaemonSetmetadata:name: disable-espnamespace: kube-systemlabels:app: disable-espspec:selector:matchLabels:app: disable-espupdateStrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1template:metadata:labels:app: disable-espspec:hostPID: truehostNetwork: truetolerations:- operator: ExistsnodeSelector:cve-43284-fix: canaryrestartPolicy: Alwayscontainers:- name: disable-espimage: busybox:1.36imagePullPolicy: IfNotPresentsecurityContext:privileged: truevolumeMounts:- name: host-rootmountPath: /hostreadOnly: falsecommand:- /bin/sh- -c- |set -euCONF_DIR="/host/etc/modprobe.d"CONF="/host/etc/modprobe.d/block-cve-2026-43284.conf"STATE_DIR="/host/var/lib/cve-2026-43284"STATE_FILE="${STATE_DIR}/pre-fix-state.json"mkdir -p "${CONF_DIR}"mkdir -p "${STATE_DIR}"echo "[INFO] node=$(hostname) kernel=$(uname -r)"# ========== 检查漏洞触发前提:CONFIG_CRYPTO_AUTHENC ==========KVER=$(chroot /host uname -r 2>/dev/null || uname -r)AUTHENC_STATUS="?"if [ -r "/host/boot/config-${KVER}" ]; thenif grep -q "^CONFIG_CRYPTO_AUTHENC=m\\|^CONFIG_CRYPTO_AUTHENC=y" "/host/boot/config-${KVER}" 2>/dev/null; thenAUTHENC_STATUS="enabled"elif grep -q "^# CONFIG_CRYPTO_AUTHENC is not set" "/host/boot/config-${KVER}" 2>/dev/null; thenAUTHENC_STATUS="n"fifiif [ "${AUTHENC_STATUS}" = "n" ]; thenecho "[INFO] CONFIG_CRYPTO_AUTHENC=n: vulnerability code path absent. NOT_AFFECTED."echo "[POSTCHECK][OK] NOT_AFFECTED - no config deployed"while true; do sleep 3600; donefiecho "[INFO] CONFIG_CRYPTO_AUTHENC=${AUTHENC_STATUS}: proceeding with esp4/esp6 check."# ========== 记录禁用前状态(幂等,仅首次写入)==========if [ ! -f "${STATE_FILE}" ]; thenESP4_LOADED="false"ESP6_LOADED="false"grep -q "^esp4 " /proc/modules 2>/dev/null && ESP4_LOADED="true"grep -q "^esp6 " /proc/modules 2>/dev/null && ESP6_LOADED="true"cat > "${STATE_FILE}" <<SNAP{"timestamp": "$(date -u '+%Y-%m-%dT%H:%M:%SZ')","hostname": "$(hostname)","kernel": "${KVER}","esp4_was_loaded": ${ESP4_LOADED},"esp6_was_loaded": ${ESP6_LOADED},"cve": "CVE-2026-43284"}SNAPchmod 0644 "${STATE_FILE}"echo "[STATE] pre-fix state saved to ${STATE_FILE}"fi# ========== 下发禁用配置 + 卸载模块 ==========for MODULE in esp4 esp6; doif grep -q "^${MODULE} " /proc/modules 2>/dev/null; thenecho "[WARN] ${MODULE} is currently LOADED. Attempting unload first..."UNLOAD_OK=0if chroot /host /sbin/modprobe -r "${MODULE}" 2>/tmp/modprobe-r.err; thenecho "[FIX] modprobe -r ${MODULE} succeeded"UNLOAD_OK=1elsecat /tmp/modprobe-r.err || trueif chroot /host /sbin/rmmod "${MODULE}" 2>/tmp/rmmod.err; thenecho "[FIX] rmmod ${MODULE} succeeded"UNLOAD_OK=1elsecat /tmp/rmmod.err || truefifiif [ "${UNLOAD_OK}" = "1" ]; thenecho "[FIX] writing blacklist config for ${MODULE}"printf 'blacklist %s\\ninstall %s /bin/false\\n' "${MODULE}" "${MODULE}" >> "${CONF}"echo "[FIX] config written for ${MODULE}"elseecho "[WARN] ${MODULE} is in use, skip - config NOT written to avoid breaking business on next load"fielseecho "[FIX] ${MODULE} not loaded, writing blacklist config"printf 'blacklist %s\\ninstall %s /bin/false\\n' "${MODULE}" "${MODULE}" >> "${CONF}"echo "[FIX] config written for ${MODULE}"fidonechmod 0644 "${CONF}" 2>/dev/null || truesync# ========== Postcheck ==========echo "[POSTCHECK] config:"cat "${CONF}"RESULT="OK"for MODULE in esp4 esp6; doif grep -q "^${MODULE} " /proc/modules 2>/dev/null; thenecho "[POSTCHECK][WARN] ${MODULE} is still loaded and config was NOT written - module is in use by business"RESULT="WARN"elseecho "[POSTCHECK][OK] ${MODULE} is not loaded"fidoneecho "[POSTCHECK][${RESULT}] CVE-2026-43284 mitigation complete"while true; do sleep 3600; donevolumes:- name: host-roothostPath:path: /type: Directory
kubectl apply -f disable-esp-canary.yaml# 观察(成功标准:日志出现 [POSTCHECK][OK] 或 NOT_AFFECTED)kubectl -n kube-system get pod -l app=disable-esp -o widekubectl -n kube-system logs -l app=disable-esp --tail=50
步骤3:Canary 通过后,删除 YAML 中的
nodeSelector 段,全量 apply:kubectl apply -f disable-esp.yamlkubectl -n kube-system rollout status ds/disable-esp --timeout=10m
CVE-2026-43500 缓解(禁用 rxrpc)
DaemonSet 在执行前会自动检查
CONFIG_RXKAD:若为 n(TencentOS 默认),直接输出 NOT_AFFECTED 进入待机,无任何配置变更;若已启用,对 rxrpc 先尝试卸载,卸载成功后写入禁用配置。配置文件路径:
/etc/modprobe.d/block-cve-2026-43500.conf步骤1:单节点预检
uname -r# 检查漏洞前提(TencentOS 默认未启用,预期输出 "not set" 或无输出)grep CONFIG_RXKAD /boot/config-$(uname -r) || echo "CONFIG_RXKAD not set - NOT AFFECTED"# 检查 rxrpc 加载状态lsmod | grep '^rxrpc' || echo "rxrpc not loaded"
检查结果 | 结论 |
CONFIG_RXKAD is not set | 天然免疫,无需操作 |
CONFIG_RXKAD=y 且 rxrpc 未加载 | 下发禁用配置即可 |
CONFIG_RXKAD=y 且 rxrpc 已加载 | 需确认业务无 AFS/Kerberos AFS 依赖,再执行卸载+配置(卸载失败则不落盘) |
rxrpc 为 built-in( =y) | modprobe 规则无效,需 kpatch 或重启到修复内核 |
也可直接以 root 用户在单节点上手动执行(无需 DaemonSet):
# 若模块未加载,直接写入禁用配置lsmod | grep '^rxrpc' || \\printf 'install rxrpc /bin/false\\n' > /etc/modprobe.d/block-cve-2026-43500.conf# 若模块已加载,先卸载成功后再写入(卸载失败则不写,避免下次重启业务不可用)rmmod rxrpc 2>/dev/null && printf 'install rxrpc /bin/false\\n' > /etc/modprobe.d/block-cve-2026-43500.conf || echo "rxrpc in use, skip"# 验证(期望 cat 有内容,grep 无回显)cat /etc/modprobe.d/block-cve-2026-43500.confcat /proc/modules | grep rxrpc
步骤2:选择 1~3 台低风险节点打标签,部署 Canary DaemonSet:
kubectl label node <node-1> cve-43500-fix=canarykubectl label node <node-2> cve-43500-fix=canary
保存为
disable-rxrpc-canary.yaml 并部署:apiVersion: apps/v1kind: DaemonSetmetadata:name: disable-rxrpcnamespace: kube-systemlabels:app: disable-rxrpcspec:selector:matchLabels:app: disable-rxrpcupdateStrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1template:metadata:labels:app: disable-rxrpcspec:hostPID: truehostNetwork: truetolerations:- operator: ExistsnodeSelector:cve-43500-fix: canaryrestartPolicy: Alwayscontainers:- name: disable-rxrpcimage: busybox:1.36imagePullPolicy: IfNotPresentsecurityContext:privileged: truevolumeMounts:- name: host-rootmountPath: /hostreadOnly: falsecommand:- /bin/sh- -c- |set -euMODULE="rxrpc"CONF="/host/etc/modprobe.d/block-cve-2026-43500.conf"STATE_DIR="/host/var/lib/cve-2026-43500"STATE_FILE="${STATE_DIR}/pre-fix-state.json"mkdir -p /host/etc/modprobe.dmkdir -p "${STATE_DIR}"echo "[INFO] node=$(hostname) kernel=$(uname -r)"# ========== 检查漏洞触发前提:CONFIG_RXKAD ==========KVER=$(chroot /host uname -r 2>/dev/null || uname -r)RXKAD_STATUS="?"if [ -r "/host/boot/config-${KVER}" ]; thenif grep -q "^CONFIG_RXKAD=y" "/host/boot/config-${KVER}" 2>/dev/null; thenRXKAD_STATUS="y"elif grep -q "^# CONFIG_RXKAD is not set" "/host/boot/config-${KVER}" 2>/dev/null; thenRXKAD_STATUS="n"elseRXKAD_STATUS="n"fifiif [ "${RXKAD_STATUS}" = "n" ]; thenecho "[INFO] CONFIG_RXKAD=n: vulnerability code path absent. NOT_AFFECTED."echo "[POSTCHECK][OK] NOT_AFFECTED - no config deployed"while true; do sleep 3600; donefiecho "[INFO] CONFIG_RXKAD=${RXKAD_STATUS}: proceeding with rxrpc check."# ========== 记录禁用前状态(幂等,仅首次写入)==========if [ ! -f "${STATE_FILE}" ]; thenMODULE_LOADED="false"MODULE_LINE=""if grep -q "^${MODULE} " /proc/modules 2>/dev/null; thenMODULE_LOADED="true"MODULE_LINE=$(grep "^${MODULE} " /proc/modules)ficat > "${STATE_FILE}" <<SNAP{"timestamp": "$(date -u '+%Y-%m-%dT%H:%M:%SZ')","hostname": "$(hostname)","kernel": "${KVER}","module_was_loaded": ${MODULE_LOADED},"module_proc_line": "${MODULE_LINE}","cve": "CVE-2026-43500"}SNAPchmod 0644 "${STATE_FILE}"echo "[STATE] pre-fix state saved to ${STATE_FILE}"fi# ========== 下发禁用配置 + 卸载模块 ==========if grep -q "^${MODULE} " /proc/modules 2>/dev/null; thenecho "[WARN] ${MODULE} is currently LOADED. Attempting unload first..."UNLOAD_OK=0if chroot /host /sbin/modprobe -r "${MODULE}" 2>/tmp/modprobe-r.err; thenecho "[FIX] modprobe -r ${MODULE} succeeded"UNLOAD_OK=1elsecat /tmp/modprobe-r.err || trueif chroot /host /sbin/rmmod "${MODULE}" 2>/tmp/rmmod.err; thenecho "[FIX] rmmod ${MODULE} succeeded"UNLOAD_OK=1elsecat /tmp/rmmod.err || truefifiif [ "${UNLOAD_OK}" = "1" ]; thenecho "[FIX] writing blacklist config for ${MODULE}"printf '# CVE-2026-43500 mitigation - DO NOT REMOVE\\nblacklist %s\\ninstall %s /bin/false\\n' "${MODULE}" "${MODULE}" > "${CONF}"chmod 0644 "${CONF}"syncecho "[FIX] config written to ${CONF}"elseecho "[WARN] ${MODULE} is in use, skip - config NOT written to avoid breaking business on next load"fielseecho "[FIX] ${MODULE} not loaded, writing blacklist config"printf '# CVE-2026-43500 mitigation - DO NOT REMOVE\\nblacklist %s\\ninstall %s /bin/false\\n' "${MODULE}" "${MODULE}" > "${CONF}"chmod 0644 "${CONF}"syncecho "[FIX] config written to ${CONF}"fi# ========== Postcheck ==========if [ -f "${CONF}" ]; thenecho "[POSTCHECK] config:"cat "${CONF}"fiif grep -q "^${MODULE} " /proc/modules 2>/dev/null; thenecho "[POSTCHECK][WARN] ${MODULE} is still loaded and config was NOT written - module is in use by business"elseecho "[POSTCHECK][OK] ${MODULE} is not loaded"fiwhile true; do sleep 3600; donevolumes:- name: host-roothostPath:path: /type: Directory
kubectl apply -f disable-rxrpc-canary.yaml# 观察(成功标准:日志出现 [POSTCHECK][OK] 或 NOT_AFFECTED)kubectl -n kube-system get pod -l app=disable-rxrpc -o widekubectl -n kube-system logs -l app=disable-rxrpc --tail=50
步骤3:Canary 通过后,删除 YAML 中的
nodeSelector 段,全量 apply:kubectl apply -f disable-rxrpc.yamlkubectl -n kube-system rollout status ds/disable-rxrpc --timeout=10m
修复后检查
# DaemonSet 状态(期望 DESIRED = READY)kubectl -n kube-system get ds disable-esp disable-rxrpc# 日志检查(成功标准:日志出现 [POSTCHECK][OK] 或 NOT_AFFECTED)kubectl -n kube-system logs -l app=disable-esp --tail=100 | grep -E "POSTCHECK|ERROR|WARN"kubectl -n kube-system logs -l app=disable-rxrpc --tail=100 | grep -E "POSTCHECK|ERROR|WARN"# 节点与业务状态kubectl get nodeskubectl get events -A --sort-by='.lastTimestamp' | tail -100
重点确认无新增:
NodeNotReady / FailedMount / FailedCreatePodSandBox,以及 CNI/DNS 连通性、IPsec 相关业务(针对 CVE-2026-43284)是否正常。异常处理与回滚
若出现业务异常,立即停止扩大范围:
kubectl -n kube-system delete ds disable-espkubectl -n kube-system delete ds disable-rxrpc
注意:
删除 DaemonSet 只会删除 Pod,不会自动清理宿主机上的配置文件,需通过以下回滚 DaemonSet 主动清理。
保存为
rollback-esp.yaml 并执行(CVE-2026-43284):apiVersion: apps/v1kind: DaemonSetmetadata:name: rollback-espnamespace: kube-systemlabels:app: rollback-espspec:selector:matchLabels:app: rollback-espupdateStrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1template:metadata:labels:app: rollback-espspec:hostPID: truehostNetwork: truetolerations:- operator: ExistsrestartPolicy: Alwayscontainers:- name: rollback-espimage: busybox:1.36imagePullPolicy: IfNotPresentsecurityContext:privileged: truevolumeMounts:- name: host-rootmountPath: /hostreadOnly: falsecommand:- /bin/sh- -c- |CONF="/host/etc/modprobe.d/block-cve-2026-43284.conf"echo "[ROLLBACK] node=$(hostname) start rollback for CVE-2026-43284"if [ -f "${CONF}" ]; thenecho "[ROLLBACK] removing ${CONF}"rm -f "${CONF}"syncelseecho "[ROLLBACK] config not found, skip"fifor MODULE in esp4 esp6; doecho "[ROLLBACK] try to reload ${MODULE} (optional)"if grep -q "^${MODULE} " /proc/modules 2>/dev/null; thenecho "[ROLLBACK] ${MODULE} already loaded"elsechroot /host /sbin/modprobe "${MODULE}" 2>/tmp/modprobe.err \\&& echo "[ROLLBACK] modprobe ${MODULE} succeeded" \\|| { echo "[WARN] modprobe ${MODULE} failed (module may not be needed)"; cat /tmp/modprobe.err || true; }fidoneif [ -f "${CONF}" ]; thenecho "[POSTCHECK][FAIL] config still exists"elseecho "[POSTCHECK][OK] config removed"fiwhile true; do sleep 3600; donevolumes:- name: host-roothostPath:path: /type: Directory
保存为
rollback-rxrpc.yaml 并执行(CVE-2026-43500):apiVersion: apps/v1kind: DaemonSetmetadata:name: rollback-rxrpcnamespace: kube-systemlabels:app: rollback-rxrpcspec:selector:matchLabels:app: rollback-rxrpcupdateStrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1template:metadata:labels:app: rollback-rxrpcspec:hostPID: truehostNetwork: truetolerations:- operator: ExistsrestartPolicy: Alwayscontainers:- name: rollback-rxrpcimage: busybox:1.36imagePullPolicy: IfNotPresentsecurityContext:privileged: truevolumeMounts:- name: host-rootmountPath: /hostreadOnly: falsecommand:- /bin/sh- -c- |MODULE="rxrpc"CONF="/host/etc/modprobe.d/block-cve-2026-43500.conf"echo "[ROLLBACK] node=$(hostname) start rollback for CVE-2026-43500"if [ -f "${CONF}" ]; thenecho "[ROLLBACK] removing ${CONF}"rm -f "${CONF}"syncelseecho "[ROLLBACK] config not found, skip"fiecho "[ROLLBACK] try to reload ${MODULE} (optional)"if grep -q "^${MODULE} " /proc/modules 2>/dev/null; thenecho "[ROLLBACK] ${MODULE} already loaded"elsechroot /host /sbin/modprobe "${MODULE}" 2>/tmp/modprobe.err \\&& echo "[ROLLBACK] modprobe ${MODULE} succeeded" \\|| { echo "[WARN] modprobe ${MODULE} failed; module may be unavailable or not required"; cat /tmp/modprobe.err || true; }fiif [ -f "${CONF}" ]; thenecho "[POSTCHECK][FAIL] config still exists"elseecho "[POSTCHECK][OK] config removed"fiwhile true; do sleep 3600; donevolumes:- name: host-roothostPath:path: /type: Directory
# 执行回滚kubectl apply -f rollback-esp.yamlkubectl apply -f rollback-rxrpc.yaml# 观察(成功标准:日志出现 [POSTCHECK][OK] config removed)kubectl -n kube-system logs -l app=rollback-esp --tail=50kubectl -n kube-system logs -l app=rollback-rxrpc --tail=50# 成功后清理kubectl -n kube-system delete ds rollback-esp rollback-rxrpc
常见异常场景:
现象 | 原因 | 处置方式 |
日志出现 [WARN] … is in use, skip | 模块正在被业务使用,配置未落盘 | 确认业务停用后重跑 DaemonSet;或置换节点;或等待内核升级根治 |
日志出现 [POSTCHECK][WARN] … still loaded and config was NOT written | 模块卸载失败,配置未落盘 | 同上 |
日志出现 [INFO] … vulnerability code path absent. NOT_AFFECTED 但实际受影响 | Kconfig 检测读取失败 | 手动执行单节点命令,确认编译选项后手动下发 |
DaemonSet Pod 无法启动 | PSP/OPA/Gatekeeper 阻止特权容器 | 临时为 kube-system 命名空间放开特权容器限制,修复后恢复 |
节点出现 NodeNotReady | 操作影响节点稳定性 | 立即停止扩大范围,先 drain 关键业务节点,再诊断 |
CVE-2026-43284 缓解后 IPsec 流量中断 | esp4/esp6 被卸载 | 立即执行回滚;若业务依赖 IPsec,需等待内核升级根治 |
常见问题
TKE 节点默认有风险吗?
CVE-2026-43284:TKE 节点默认网络方案不依赖 IPsec ESP,esp4/esp6 通常未加载,整体风险较低。建议通过
lsmod | grep -E '^esp4|^esp6' 确认。CVE-2026-43500:原生节点、超级节点使用 TencentOS 内核,
CONFIG_RXKAD 默认未启用,天然不受影响。普通节点取决于所使用的操作系统,建议通过 grep CONFIG_RXKAD /boot/config-$(uname -r) 确认。两个 CVE 可以同时处置吗?
可以,两个 DaemonSet 相互独立,可并行部署。建议分别 Canary 验证后再各自全量。
CVE-2026-43284 中,禁用 esp4/esp6 是否会影响普通网络通信?
普通 TCP/UDP、HTTPS、SSH 不依赖 esp4/esp6,不受影响。仅 IPsec ESP 模式的加密隧道会失效。
CVE-2026-43500 中,禁用 rxrpc 是否会影响业务?
rxrpc 模块仅用于 AFS 分布式文件系统协议,普通业务通常不依赖此模块。TencentOS 上
CONFIG_RXKAD 默认未启用,大多数节点 DaemonSet 会直接输出 NOT_AFFECTED。已部署 CVE-2026-31431 的缓解 DaemonSet,是否覆盖本次漏洞?
不覆盖。 CVE-2026-31431 的
algif_aead 黑名单与本次两个漏洞完全无关,需单独部署。DaemonSet 临时修复后是否还需要升级内核?
需要。DaemonSet 仅是临时缓解,根治需升级到含 CVE-2026-43284 / CVE-2026-43500 修复补丁的内核或节点镜像。
集群开了 PSP 怎么办?
若开启了
k8sPSPPrivilegedContainer、k8sPSPHostNamespace、k8sPSPHostNetworkingPorts 且未豁免 kube-system,需先临时放开 kube-system 命名空间,修复完成后恢复。