DirtyPipe学习分析

Dirty Pipe学习

漏洞编号:

CVE-2022-0847

漏洞影响:

linux内核权限提升

原理直击:

splice 中建立完页面映射后,此时 head 会指向下一个 pipe_buffer,此时我们再向管道中写入数据,管道计数器会发现上一个 pipe_buffer 没有写满,从而将数据拷贝到上一个 pipe_buffer 对应的页面——即文件映射的页面,由于 PIPE_BUF_FLAG_CAN_MERGE 仍保留着,因此内核会误以为该页面可以被写入,从而完成了越权写入文件的操作

splice系统调用中未清空 pipe_buffer 的标志位,从而将管道页面可写入的状态保留了下来,当然也就有了越权读写的能力,但是无法在文件的边界进行读写。

POC:

来自:

1
2
3
https://xz.aliyun.com/t/11016

原理是先将一个一个管道完全写满后读出一遍,为了给每个pipe_buffer上标志位,这个标志位可以让后面读取一个字节的文件进行读写操作。也就是越权读写,但是无法在文件的边界进行读写,因为这个边界也是对应pipe_buffer的边界,当其位于边界时无法触发管道读写的"优化"操作。也就无法进入到pipe_buffer的那个页面映射。

POC演示

POC

EXP

来源

1
2
https://haxx.in/files/dirtypipez.c

EXP演示

EXP