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, 上游代理, 协议分析, 子域名突变, 容器逃逸, 应用安全, 本地提权, 权限提升, 漏洞修复, 漏洞缓解, 端点安全, 网络安全, 网络安全培训, 补丁管理, 隐私保护