跳至正文
Wener Notes

CVE-2022-0847

约 2 分钟阅读
  • Dirty Pipe - Linux 管道缓冲区标志未正确初始化,导致只读文件的页缓存可被覆盖
  • 公开披露:2022-03-07,发现者 Max Kellermann
  • 攻击者需要本地执行能力及目标文件的读权限,无需文件写权限
  • 严重性:CVSS 3.1 7.8 High(CISA-ADP)
    • CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
  • CWE:CWE-665(初始化不当,Red Hat CNA)

成因与影响

  • copy_page_to_iter_pipe()、push_pipe() 创建管道缓冲区时未正确初始化 pipe_buffer.flags
  • 残留的 PIPE_BUF_FLAG_CAN_MERGE 使后续管道写入可能合并到文件页缓存,而不是独立的管道数据页
  • 可篡改其他进程读到的文件内容,进一步通过特权程序提升权限
  • 修改首先发生在页缓存,不一定持久写入磁盘;磁盘文件未变化也不能据此认定未受攻击
  • 只读挂载、immutable 文件属性也不能阻止这种页缓存写入

影响范围与修复

  • 公开利用路径从 Linux 5.8 起成立;标志初始化缺陷更早存在,但 5.8 的合并逻辑使其可被这样利用
上游分支首个修复版本
5.165.16.11
5.155.15.25
5.105.10.102
  • 上述稳定版本于 2022-02-23 发布;发行版包应按厂商回补公告判断
  • 更新实际运行的内核并重启;容器共享宿主机内核,更新容器用户空间软件包不能修复宿主机漏洞
  • 重启可能清除被修改的页缓存,但启动到仍有漏洞的内核不能消除风险

利用限制

  • 需要能读取目标文件
  • 单次覆盖不能从内存页边界开始,也不能跨越页边界
  • 不能利用这一写入机制扩大文件长度
  • 与 不同,公开的 Dirty Pipe 利用路径不依赖抢占竞态窗口

PoC

  • Max Kellermann 的原始披露内含 C 语言文件覆写 PoC,可用于观察对只读文件页缓存的修改
  • 用可丢弃的测试文件和页内偏移观察现象;目标需要可读,仍受前述页边界与文件长度限制
  • 原理示意:
text
只读文件页 --splice--> 管道缓冲区引用
                       |
                       +-- 写入标记数据

正常:标记进入管道自己的数据页,文件内容不变
漏洞:残留的合并标志使标记写入源文件页缓存
  • 关键观察是源文件内容被影响;向管道成功写入数据本身不能证明漏洞
  • 页缓存污染可能影响其他读取同一文件的进程;不应把没有磁盘持久变化当成无副作用

参考

关联信息

反向链接、本文链接的其他页面和外部资料。

反向链接

  • CVE-2016-5195
    笔记 · Dirty Pipe

    Dirty COW - Linux 写时复制处理中的竞态条件,可导致本地权限提升 · COW / Copy-on-Write / 写时复制 · 公开披露:2016-10-19(Red Hat 公告);2016 年 10 月已发现实际利用 · 攻击者需要能够在目标系统运行本地程序,无需目标文件的写权限

站内链接

  • CVE-2016-5195
    笔记 · Dirty COW

    Dirty COW - Linux 写时复制处理中的竞态条件,可导致本地权限提升 · COW / Copy-on-Write / 写时复制 · 公开披露:2016-10-19(Red Hat 公告);2016 年 10 月已发现实际利用 · 攻击者需要能够在目标系统运行本地程序,无需目标文件的写权限

参考资料

其他外链3 条
最近更新commit 0c5208b编辑