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报告查看器, 安全渗透, 应用安全, 本地提权, 漏洞缓解, 系统运维, 网络安全, 隐私保护