- Dirty COW - Linux 写时复制处理中的竞态条件,可导致本地权限提升
- COW / Copy-on-Write / 写时复制
- 公开披露:2016-10-19(Red Hat 公告);2016 年 10 月已发现实际利用
- 攻击者需要能够在目标系统运行本地程序,无需目标文件的写权限
- 严重性:CVSS 3.1
7.0 High(CISA-ADP)
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
成因与影响
- Linux 内存子系统在处理私有只读映射的写时复制时存在竞态,涉及
mm/gup.c 与 get_user_pages()
- 写入本应落到进程的私有副本,攻击者却可能使修改作用于文件支持的内存页,绕过普通文件权限
- 可篡改原本只读的文件或特权程序,进而提升权限;漏洞本身是本地提权,需要先有本地执行能力
- 与 Dirty Pipe 的结果相似,但根因是写时复制竞态,不能套用 Dirty Pipe 的页边界限制
影响范围与修复
- 影响多个旧 Linux 2.x、3.x、4.x 分支中未包含修复的内核
- Linux
4.8 分支首个修复版本为 4.8.3;旧稳定分支及发行版另有回补
- 不能把所有低于
4.8.3 的发行版内核都判为未修复
- 上游修复:
19be0eaffa3a
- 安装发行版提供的已修复内核,重启进入新内核,或使用厂商明确覆盖该 CVE 的热补丁
- 文件设为只读、限制普通文件写权限不能替代内核修复
- 若发现特权程序或系统文件被篡改,还需恢复文件完整性并调查凭据泄露;仅更新内核不能撤销已有修改
PoC
dirtycow/dirtycow.github.io 中的 dirtyc0w.c 是基础文件覆写 PoC,接受目标文件和替换内容
- 观察方法:在隔离虚拟机中准备一个测试用户可读但不可写的普通文件,比较普通写入和 PoC 后的文件内容
- 正常权限检查:普通写入被拒绝
- 漏洞现象:PoC 借助私有只读映射及并发操作,仍可改变该文件的可见内容
- 该文件确实会被修改;基础 PoC 验证文件覆写,不自动等同于已获得 root shell
- 项目的 PoCs Wiki 还列有修改特权程序或账户文件的变体,不能将这些变体当作只读检测