johnhsb/dirty-frag-cve-2026-mitigation
GitHub: johnhsb/dirty-frag-cve-2026-mitigation
针对 Linux 内核 Dirty Frag 系列 LPE 漏洞的临时缓解脚本与综合应对指南,通过拦截高危内核模块在内核补丁可用前降低风险。
Stars: 0 | Forks: 0
# dirty-frag-cve-2026 缓解
针对 Linux 内核 "Dirty Frag 系列" 5 种本地权限提升(LPE)漏洞的**临时缓解脚本**与综合应对指南。
- **CVE-2026-31431** (Copy Fail) — 内核 crypto API (`algif_aead`)
- **CVE-2026-43284** (Dirty Frag / ESP) — IPsec ESP 输入处理 (`esp4`, `esp6`)
- **CVE-2026-43500** (Dirty Frag / RxRPC) — RxRPC 协议 (`rxrpc`)
- **CVE-2026-46300** (Fragnesia) — Dirty Frag (ESP) 补丁的回归 bug
- **CVE-2026-43503** (DirtyClone) — skb 复制路径(内核核心),上述三个模块是已知的触发路径
这 5 个漏洞全部共享相同的失败模式,即**“将基于文件的页缓存(page cache)视为普通数据包缓冲区进行就地(in-place)写入”**,但由于触发路径各不相同,因此**需要单独的补丁**。有关详细背景,请参阅 [dirty-frag-family-guide.md](dirty-frag-family-guide.md)。
## 文件构成
| 文件 | 说明 |
|---|---|
| [mitigate-cve-2026.sh](mitigate-cve-2026.sh) | 缓解脚本主体 |
| [dirty-frag-family-guide.md](dirty-frag-family-guide.md) | 包含各漏洞详细原理、补丁链结构以及 RHEL/CentOS 版本信息的综合技术指南 |
## 特点与优势
- **幂等性(idempotent)**:在同一台设备上多次运行,其结果和副作用保持不变。可通过 Ansible 等工具在大量服务器上重复应用。
- **非破坏性预检**:运行时会首先显示当前的所有状态(模块是否加载、是否为内置、发行版补丁情况、VPN/容器使用信号),只有在明确输入 `y` 确认后才会进行实际更改。
- **自动检查并跳过发行版补丁**:会查询 RedHat 系(RHEL/CentOS Linux/CentOS Stream/Rocky/AlmaLinux/Oracle Linux)的 `rpm` changelog,以及 Debian/Ubuntu 系的 dpkg changelog(优先本地,网络回退使用 `apt changelog`),**自动将已修复的 CVE 排除在处理范围之外**。如果确认这 5 个 CVE 全部不适用或已修复,脚本将在不进行任何更改的情况下提前退出。
- **自动检测内置(`=y`)**:如果目标代码不是可加载模块而是直接编译进内核,脚本会自动检测到无法通过此脚本进行缓解,并发出警告,提供替代方案(打补丁/实时补丁/限制 namespace)。
- **检测 VPN/IPsec、RxRPC/AFS 及容器使用信号**:检查 `ip xfrm`、IKE 端口、strongswan/libreswan 服务、AFS 挂载、docker/podman/containerd/kubelet 等,提前提示拦截操作可能对实际服务造成的影响(启发式检测——最终决定权在运维人员)。
- **安全的执行流程**:在非交互式运行(cron, CI, 管道等)时会自动中止,防止发生意外更改。在任何需要 `sudo` 权限的操作前,都会经过明确的确认。
- **不使用可预测的临时文件**:基于 `mktemp` + `trap` 安全地清理临时文件。
## 使用方法
```
sudo bash mitigate-cve-2026.sh
```
1. **预检** —— 不做任何更改,仅显示模块加载状态、是否为内置、发行版补丁状态以及 VPN/容器使用信号。
2. **确认提示** —— 仅针对需要处理的模块询问是否拦截/卸载(`y/N`)。在此输入 `N` 或直接按回车键,将不做任何更改直接退出。
3. **生成拦截配置并卸载** —— 确认后,将生成 `/etc/modprobe.d/mitigate-cve-2026.conf` 以阻止目标模块自动加载,并卸载当前已加载的模块。
4. **事后验证** —— 再次检查加载状态和拦截规则是否已应用并显示。
5. **(可选)内置应对** —— 如果检测到内置代码,会进一步询问是否限制非特权 user/net namespace 的创建(可能会对容器/沙箱产生影响)。
有关执行前需确认的前提条件、运维程序建议及回滚方法,请参阅 [dirty-frag-family-guide.md](dirty-frag-family-guide.md) 的第 5 节。
### 要求
- Bash 4+(使用关联数组)
- `sudo` 权限,交互式终端
- RedHat 系:`rpm`
- Debian/Ubuntu 系:`dpkg`,(可选)`apt`, `timeout`
## 缓解范围与局限
| 操作 | 对应 CVE |
|---|---|
| 拦截 `esp4`/`esp6` | 43284, 46300, 43503 |
| 拦截 `rxrpc` | 43500 |
| 拦截 `algif_aead` | 31431 |
| 限制非特权 namespace(可选) | 应对 43503 等内核核心缺陷 |
DirtyClone (CVE-2026-43503) 的根本缺陷存在于内核核心函数 (`__pskb_copy_fclone()`) 中,仅靠拦截模块可能无法完全解决。**唯一彻底的解决办法是升级(打补丁)至包含完整 DirtyFrag+Fragnesia 补丁链的内核(上游 v7.1-rc5 及以上版本)**。详情请参阅 [dirty-frag-family-guide.md](dirty-frag-family-guide.md) 的第 4 节和第 5.5 节。
## 许可证
本仓库公开,无单独的许可证文件。使用前请务必查阅 [dirty-frag-family-guide.md](dirty-frag-family-guide.md) 中的注意事项。
标签:Cutter, Linux内核, Shell脚本, Web报告查看器, 安全渗透, 应用安全, 本地提权, 漏洞缓解, 系统运维, 网络安全, 隐私保护