针对两个 Linux 页缓存损坏 LPE(DirtyClone CVE-2026-43503、pedit COW CVE-2026-46331)的教育性防御工具包:加固、检测、验证、seccomp 及验证框架。仅用于检测和预防——不含漏洞利用代码。TLP:CLEAR。
检测、遏制并验证针对两种 Linux 页缓存损坏本地提权漏洞——DirtyClone(CVE-2026-43503) 和 pedit COW(CVE-2026-46331)——在主机和容器中的防御措施。
这是一个教育性、防御性的安全套件。它解释了这两个漏洞如何在系统调用层面工作,并提供了加固、检测、验证和 seccomp 工具——外加一个验证框架,证明这些工具在实际内核上有效。它不包含任何漏洞利用代码、shellcode 或目标偏移量,这是经过设计的。
这两个 CVE 允许无特权的本地用户通过损坏 setuid-root 二进制文件(如 /usr/bin/su)的页缓存(RAM 副本)来成为 root——而无需触碰磁盘上的文件。这使得它们难以被发现:文件完整性监控保持绿色,磁盘取证找不到任何痕迹,且损坏在重启后清除。
修补内核是真正的解决方案。但在补丁部署窗口期间——以及作为后续纵深防御——你需要关闭攻击路径、监视攻击链并验证你的安全态势。这正是本套件所提供的,每个控制措施都映射到利用链中记录在案的步骤,以便你了解其为何有效。
这两个缺陷属于同一类别:内核写入它认为是私有的缓冲区,而该缓冲区仍然由共享的、文件背的页缓存内存支持。 两个结构性的门控制着两个漏洞所有变种:
上游已在稳定版本补丁(DirtyClone ≥ 6.12.91 / 7.0.10;pedit COW 6.12.94 / 7.0.13)和厂商反向移植中修复;主线 7.1 是最终版本。对照你的发行版的跟踪器确认内核版本——请参阅 docs/analysis.md §8。
仅限 Linux 主机。 这些脚本会读取和写入真实的内核状态。在你控制的主机上运行加固脚本;在可丢弃的虚拟机上运行破坏性的验证框架。参见系统要求。
# 1. 预览主机遏制更改(不写入任何内容)
sudo ./kit/harden-pagecache-lpe.sh --dry-run
# 2. 应用用户命名空间限制 + 易受攻击模块阻止
sudo ./kit/harden-pagecache-lpe.sh
# 3. 验证安全态势——以非特权用户身份运行功能探测
sudo -u nobody ./kit/verify-pagecache-lpe.sh # 退出码:0=通过 1=警告 2=失败
# 4. (可选)使用 eBPF 实时观察攻击链
sudo bpftrace ./kit/detect-pagecache-lpe.bt
对于容器,应用 seccomp 覆盖配置文件(kit/seccomp-pagecache-lpe.json):
docker run --security-opt seccomp=kit/seccomp-pagecache-lpe.json <镜像>
初次使用? 阅读 START-HERE.md——一个引导式、讲座式的讲解,从根本原因到完整的验证运行。
.
├── START-HERE.md 引导式讲解——推荐的起点
├── docs/ “为什么”:分析和操作指南
│ ├── analysis.md 根本原因分析、攻击链、检测工程
│ ├── HARDENING-GUIDE.md 操作员遏制指南(主机 → systemd → Docker → Kubernetes)
│ └── plain-language-summary.md 更温和的、通俗易懂的英文概述
├── kit/ “你运行的内容”:四个自包含工件
│ ├── harden-pagecache-lpe.sh 应用主机遏制(sysctl + 模块阻止)
│ ├── verify-pagecache-lpe.sh 只读安全态势检查(通过/警告/失败)
│ ├── detect-pagecache-lpe.bt bpftrace/eBPF 遥测,用于阶段攻击链
│ └── seccomp-pagecache-lpe.json 容器 seccomp 覆盖,拒绝攻击链的系统调用
└── testkit/ “证明”:验证框架 + SHOWCASE.md 记录
harden,verify):安装了 bash、sysctl、modprobe 和 unshare 的 Linux 主机。加固需要 root 权限;以非 root 用户身份运行验证探测。detect-pagecache-lpe.bt):root 权限、bpftrace ≥ 0.16 以及内核 BTF(/sys/kernel/btf/vmlinux)。某些 kprobe 可能在内核中被内联——脚本头部说明了如何适配。testkit/):可丢弃的 Linux 虚拟机——它会写入真实配置并卸载内核模块。EC2 启动器需要 AWS CLI v2 和 jq;不使用 SSH(传输方式为 AWS SSM)。macOS 用户可以运行本地 Docker 冒烟测试,但完整验证需要 Linux。TLP:CLEAR——公开,不受限制地分发。 此仓库仅用于检测和预防。它特意包含:
…并特意排除:
关于此方法(验证能证明和不能证明什么)的诚实限制,记录在 testkit/SHOCASE.md §8 中。仅在你拥有或有权测试的系统上使用。 加固是遏制,不是根治:请修补你的内核。
START-HERE.md —— 引导式讲解(从这里开始)docs/analysis.md —— 完整的技术分析docs/plain-language-summary.md —— 更温和、通俗易懂的英文概述欢迎提交 Issue 和 Pull Request——请参阅 CONTRIBUTING.md。由于控制措施在多个文件(模块列表、用户命名空间设置、检测位图)中镜像,请在更改攻击面之前阅读该指南中的同步不变量。
根据 Apache 许可证 2.0 许可。
| 门 | 定义 | 作为控制措施的强度 |
|---|
| 1. 能力路径 | 通过无特权的用户命名空间(unshare(CLONE_NEWUSER|CLONE_NEWNET))获得 CAP_NET_ADMIN | 健壮的扼制点——所有变种都必须经过此处,已知和未知的。首先关闭它。 |
| 2. 模块面 | 易受攻击的模块:act_pedit、esp4/esp6、rxrpc、xt_TEE、nf_dup_ipv4/nf_dup_ipv6 | 纵深防御——仅消除已知原语;新的接收点可能会绕过它。 |
| 组件 | 角色 |
|---|
docs/analysis.md | 真理之源:根本原因、行为攻击链、检测工程、加固、对比表。 |
docs/HARDENING-GUIDE.md | 针对主机、systemd 单元、Docker/Podman 和 Kubernetes 的分层遏制。 |
kit/ | 四个交付物。将此目录复制到主机以防御它。 |
testkit/ | 在实际内核上可重现的验证(本地 Docker + 可丢弃的 EC2),以及 SHOWCASE.md——对于测试能证明和不能证明什么内容的诚实评估。 |