针对 CVE-2016-5195(Dirty COW)的防御性研究、非武器化验证与补丁分析。该漏洞是 Linux 内核中的写时复制(copy-on-write)竞态条件,可允许本地用户修改与只读内存映射关联的数据,并获得提升的权限。
| 字段 | 值 |
|---|---|
| 组件 | Linux 内核内存管理 / get_user_pages() |
| 弱点 | CWE-362:使用共享资源进行并发执行但同步不当 |
| 严重性 | 高危,CVSS 3.1:7.0 |
| 攻击向量 | CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 攻击前提 | 本地低权限访问 |
| 上游修复 | 19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619 |
| 首个修复的上游版本 | Linux 4.8.3;各发行版移植情况不同 |
Dirty COW 是 Linux 内核在处理强制写入与写时复制(COW)映射时存在的一个竞态。本地用户可通过 /proc/self/mem 使页失效与写入操作形成竞态。在受影响的内核上,该竞态可能导致与名义上只读的私有映射关联的数据被写回到底层文件。
其公开影响是:当攻击者能够将该原语应用于安全敏感的文件时,可实现本地权限提升。该漏洞于 2016 年 10 月被在野利用。本仓库不对此提权路径进行自动化。
默认的验证工具集经过刻意限制:
cc -std=c11 -Wall -Wextra -Wpedantic -Werror -O2 \
poc.c -o dirtycow-safe -pthread
仅限实验室使用的漏洞利用原语可单独构建:
cc -std=c11 -Wall -Wextra -Wpedantic -Werror -O2 \
exploit.c -o dirtycow-exploit -pthread
./dirtycow-safe
可选的有界迭代次数:
./dirtycow-safe --iterations 5000000
可能的结果:
marker-observed:在该一次性 inode 上观察到了存在漏洞的行为。marker-not-observed:结果不确定。竞态未触发并不证明内核已修复。77:所需的 Linux /proc/self/mem 接口不可用。请勿将 PoC 结果作为补丁状态的首要检查依据。请查阅当前运行发行版的内核包公告,并在重启后确认已打补丁的内核处于生效状态。
exploit.c 接受显式指定的文件与替换前缀,并在受影响的内核上演示任意文件写入原语。它要求使用字面量 --i-understand 进行确认,对载荷与迭代次数施加有界限制,且不会构建权限提升载荷。
所选文件可能被永久修改。仅可在你拥有或明确获准测试的隔离、一次性实验环境中使用。完整的竞态与状态转换分析见 ROOT_CAUSE.md。
evidence/evidence.json 记录了在官方修复前与修复后的 Linux 版本中观察到的源码签名、PoC 无警告编译结果以及验证安全属性。evidence/validation.log 提供了简明摘要。所附的验证过程未执行竞态测试。
安装厂商提供的内核更新并重启进入已打补丁的内核。请勿仅凭上游版本号判断是否受影响:企业版与发行版内核通常会在不采用上游版本号的情况下移植该修复。容器使用宿主内核,因此修复必须覆盖宿主。
确切的上游改动请参阅 PATCH_ANALYSIS.md,验证指南请参阅 VULNERABILITY_REPORT.md。
仅可在你拥有或明确获准测试的系统上使用本材料。
| 路径 | 用途 |
|---|
poc.c | 仅使用未链接的临时 inode 进行非武器化验证 |
exploit.c | 供已获授权的一次性实验环境使用的任意文件写入原语 |
ROOT_CAUSE.md | 详细的漏洞状态转换与竞态分析 |
VULNERABILITY_REPORT.md | 前提条件、根因、影响与修复 |
PATCH_ANALYSIS.md | 对上游 FOLL_COW 修复的逐行分析 |
evidence/ | 结构化的验证输出与解读说明 |