yandex-cloud-examples/yc-mk8s-copy-fail-mitigation

GitHub: yandex-cloud-examples/yc-mk8s-copy-fail-mitigation

通过 Kubernetes DaemonSet 自动检测并缓解 Yandex Managed Kubernetes 集群中 Linux 内核 CVE-2026-31431 本地提权漏洞的应急修复工具。

Stars: 5 | Forks: 0

# Yandex Managed Kubernetes 的 CVE-2026-31431 修复 自动修复 Yandex Managed Kubernetes 集群中所有 worker 节点上的 Linux 内核 CVE-2026-31431 漏洞。 ## 漏洞描述 **CVE 标识符 (CVE ID):** CVE-2026-31431 **CVE 链接:** https://nvd.nist.gov/vuln/detail/CVE-2026-31431 **原始报告:** - 漏洞网站: https://copy.fail/ - Xint Code (Theori) 技术分析: https://xint.io/blog/copy-fail-linux-distributions - PoC 及 issue tracker: https://github.com/theori-io/copy-fail-CVE-2026-31431 **简要说明:** Copy Fail (CVE-2026-31431) 是 Linux 内核加密 API 子系统中的一个逻辑漏洞,允许普通系统用户获取超级用户 (root) 权限。该 PoC 适用于自 2017 年发布至补丁发布前的所有主要 Linux 发行版,无需针对特定内核或发行版进行修改。 **攻击特点:** - 不需要远程访问——仅需非特权本地账户 - 不需要 race window 或特定于内核的偏移量 - 利用内核的 crypto-API (AF_ALG),该 API 在几乎所有主流发行版的默认配置中均已启用 - 可被用作从容器逃逸到宿主机的原语,因为 page cache 在整个节点中是共享的 **受影响的技术:** - Linux 内核,crypto/ 子系统 (algif_aead 模块) - 用户空间接口 AF_ALG - splice() 系统调用与 AF_ALG 套接字的结合使用 以下加密 API 的使用路径不受此漏洞直接影响:dm-crypt / LUKS、kTLS、IPsec/XFRM、in-kernel TLS、默认构建的 OpenSSL/GnuTLS/NSS、SSH、kernel keyring crypto——它们都直接与 in-kernel crypto API 交互,而不经过 AF_ALG。 **CVSS v.3.1 攻击向量与危险等级:** 基本评分:**7.8 HIGH** 向量:`CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H` ## 此修复的功能 DaemonSet 会在集群的每个 worker 节点上自动执行以下操作: 1. **检查漏洞** - 测试 AF_ALG AEAD 接口的可用性 2. **屏蔽模块** - 创建配置文件 `/etc/modprobe.d/disable-algif.conf` 3. **卸载模块** - 如果模块已加载,则执行 `rmmod algif_aead` 4. **验证修复** - 检查漏洞是否已被消除 5. **持续监控** - 每小时检查一次配置是否存在,并在必要时进行恢复 ## 快速开始 ### 1. 下载 DaemonSet ``` 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 ``` ### 2. 应用修复 ``` kubectl apply -f copy-fail-mitigation-daemonset.yaml ``` ### 3. 检查应用状态 ``` # 检查 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 ``` ### 4. 查看修复应用日志 ``` # 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 ``` ## 成功应用示例 ``` ========================================= CVE-2026-31431 Fix for Yandex Managed K8s Node: demo-ru-central1-a-1 Date: Thu Apr 30 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/disable-algif.conf Step 3: Unloading algif_aead module if loaded... ✓ Module unloaded successfully Step 4: Verifying the fix... ✓ Configuration file exists: install algif_aead /bin/false Step 5: Testing if vulnerability is fixed... ✓ AF_ALG AEAD interface is properly blocked ========================================= ✓ CVE-2026-31431 fix applied successfully ========================================= ``` ## 手动检查漏洞 您可以手动检查节点上是否存在该漏洞。通过 SSH 连接到节点并执行: ``` # 检查漏洞 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/disable-algif.conf # 预期输出: # install algif_aead /bin/false ``` ## 移除修复 如果需要移除 DaemonSet: ``` kubectl delete -f copy-fail-mitigation-daemonset.yaml ``` **重要提示:** 移除 DaemonSet **不会** 删除节点上的配置文件。文件 `/etc/modprobe.d/disable-algif.conf` 将保留在原位并继续保护系统。 要完全移除节点上的修复,您需要通过 SSH 连接到每个节点并手动删除文件: ``` rm /etc/modprobe.d/disable-algif.conf ``` ## 技术细节 **所需权限:** - `hostPID: true` - 用于通过 nsenter 访问宿主机的进程 - `privileged: true` - 用于写入 `/etc` 和卸载内核模块 - Volume mount `/` - 用于访问宿主机文件系统 **镜像:** `ubuntu:22.04` **资源占用:** - Init 容器: 10m CPU / 64Mi RAM (requests), 200m CPU / 128Mi RAM (limits) - Monitor 容器: 5m CPU / 32Mi RAM (requests), 50m CPU / 64Mi RAM (limits) **命名空间:** `kube-system` ## 兼容性 - ✓ Yandex Managed Kubernetes - ✓ Ubuntu 20.04 - ✓ Ubuntu 22.04 - ✓ Kubernetes 1.20+ ## 许可证 Apache License 2.0 详见 [LICENSE](LICENSE)。 ## 支持 如果遇到问题,请在仓库中创建 issue。
标签:AF_ALG, Crypto API, CVE-2026-31431, DaemonSet, DevSecOps, Linux内核, Managed Kubernetes, Pandas, Web报告查看器, Yandex Cloud, 上游代理, 协议分析, 子域名突变, 容器逃逸, 应用安全, 本地提权, 权限提升, 漏洞修复, 漏洞缓解, 端点安全, 网络安全, 网络安全培训, 补丁管理, 隐私保护