自动为 Yandex Managed Kubernetes 集群的所有 worker 节点应用针对 Linux 内核漏洞 CVE-2026-31431、CVE-2026-43284 和 CVE-2026-43500 的缓解措施。
CVE 标识符(CVE ID): CVE-2026-43284、CVE-2026-43500
CVE 链接: https://nvd.nist.gov/vuln/detail/CVE-2026-43284
原始报告:
简要描述:
Dirty Frag 是 Linux 内核中的一类逻辑漏洞,允许非特权本地用户获取超级用户(root)权限。利用过程结合了 xfrm-ESP 和 RxRPC 子系统中两个独立的 page-cache 写入原语,每个原语本身都足以实现权限提升。
Copy Fail 2: Electric Boogaloo 是一个独立的 PoC,利用 xfrm-ESP 原语(CVE-2026-43284)。从漏洞类别来看,它与原始的 Copy Fail(CVE-2026-31431)类似,因此此 DaemonSet 同时保留了针对原始 AF_ALG 场景和新的 Dirty Frag 变体的缓解措施。
攻击方式:
kernel panicpage cache 对整个节点是共享的两种变体的根本原因相同:当使用 splice() / MSG_SPLICE_PAGES 时,内核会将 page cache 页面直接放入套接字缓冲区(skb)的片段中。xfrm-ESP 和 RxRPC 子系统会对这些片段执行就地解密,而不检查它们是否为私有页面。结果,攻击者可以获得对任何可读文件的 page cache 的受控写入。
受影响的技术:
net/ipv4/esp4.c / net/ipv6/esp6.c 子系统(xfrm-ESP)net/rxrpc/rxkad.c 子系统(RxRPC / RxKAD)splice() / vmsplice() 与 UDP 套接字(ESP-in-UDP)和 AF_RXRPC 结合使用AF_ALG(algif_aead)单独保留原始 Copy Fail(CVE-2026-31431)的缓解措施该漏洞不直接影响作为 Dirty Frag 一部分的 AF_ALG(algif_aead)——这是单独的 Copy Fail 漏洞(CVE-2026-31431)。同样,dm-crypt / LUKS、kTLS、内核内 TLS 以及无 UDP 封装的 tunnel 模式下的 IPsec 也不受直接影响。
攻击向量和 CVSS v.3.1 危险等级:
基础评分:截至发布时尚未分配。
从性质上看,该漏洞类似于 Copy Fail(CVE-2026-31431,7.8 HIGH,CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)——这是一种无 race condition 的本地权限提升。
DaemonSet 会在集群的每个 worker 节点上自动执行以下操作:
AF_ALG 的可用性——为原始 Copy Fail 场景执行快速测试/etc/modprobe.d/blacklist-lpe.conf,包含针对 algif_aead、esp4、esp6 和 rxrpc 的规则algif_aead、esp4、esp6 和 rxrpc 已加载,则执行 rmmodpage cache 并验证配置——清理缓存并检查配置文件是否存在wget https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-copy-fail-mitigation/main/copy-fail-mitigation-daemonset.yaml
或者克隆仓库:
git clone https://github.com/yandex-cloud-examples/yc-mk8s-copy-fail-mitigation.git
cd yc-mk8s-copy-fail-mitigation
kubectl apply -f copy-fail-mitigation-daemonset.yaml
# 检查 DaemonSet 状态
kubectl get daemonset -n kube-system cve-2026-31431-fix
# 查看修复已应用到多少个节点
kubectl get pods -n kube-system -l app=cve-2026-31431-fix -o wide
# initContainer 日志(应用修复)
kubectl logs -n kube-system -l app=cve-2026-31431-fix -c apply-fix
# 主容器日志(监控)
kubectl logs -n kube-system -l app=cve-2026-31431-fix -c monitor
=========================================
Copy Fail / Dirty Frag mitigation for Yandex Managed K8s
Node: demo-ru-central1-a-1
Date: Thu May 08 14:00:00 UTC 2026
=========================================
Step 1: Checking vulnerability before fix...
❌ System is VULNERABLE - AF_ALG AEAD interface is accessible
Step 2: Creating modprobe configuration...
✓ Created /etc/modprobe.d/blacklist-lpe.conf
Step 3: Unloading vulnerable modules...
✓ algif_aead unloaded
✓ esp4 not loaded
✓ esp6 not loaded
✓ rxrpc not loaded
Step 3.5: Dropping system caches...
✓ System caches cleared
Step 4: Verifying the fix...
✓ Configuration file exists:
install algif_aead /bin/false
install esp4 /bin/false
install esp6 /bin/false
install rxrpc /bin/false
Step 5: Testing if vulnerability is fixed...
✓ AF_ALG AEAD interface is properly blocked
=========================================
✓ Mitigation applied successfully
=========================================
您可以手动检查节点上是否存在漏洞。通过 SSH 连接到节点并执行:
# 通过 AF_ALG 检查原始 Copy Fail 场景的可用性
python3 -c 'import socket; s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0); s.bind(("aead","authencesn(hmac(sha256),cbc(aes))")); print("AF_ALG AEAD available - VULNERABLE")'
# 如果输出 "AF_ALG AEAD available - VULNERABLE" - 系统存在漏洞
# 如果报错 - 系统已受保护
检查配置:
# 检查阻止配置是否存在
cat /etc/modprobe.d/blacklist-lpe.conf
# 预期输出:
# install algif_aead /bin/false
# install esp4 /bin/false
# install esp6 /bin/false
# install rxrpc /bin/false
检查易受攻击的模块是否未加载:
lsmod | egrep 'algif_aead|esp4|esp6|rxrpc'
如果需要删除 DaemonSet:
kubectl delete -f copy-fail-mitigation-daemonset.yaml
重要提示: 删除 DaemonSet 不会从节点上删除配置文件。文件 /etc/modprobe.d/blacklist-lpe.conf 将保留在原位并继续保护系统。
要从节点上完全移除修复,需要 SSH 连接到每个节点并手动删除文件:
rm /etc/modprobe.d/blacklist-lpe.conf
使用的权限:
hostPID: true——用于通过 nsenter 访问主机进程privileged: true——用于写入 /etc 和卸载内核模块/——用于访问主机文件系统镜像: ubuntu:22.04
资源:
命名空间: kube-system
Apache License 2.0
详见 LICENSE。
如遇问题,请在仓库中创建 issue。