|
|
标题: Linux Kernel 条件竞争导致本地提权漏洞(DirtyC0W)
CVSS分值: 7.2
CVSS: CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
披露时间: 2016-11-27 00:00:00
利用难度: LOW
POC公开时间: 2017-05-30 00:35:15
CVEID: CVE-2016-5195
简介:
这是一个通杀的Linux Kernel提权漏洞,又称DirtyCOW漏洞。漏洞触发在Linux内核的内存子系统在处理写时拷贝(Copy-on-Write)时存在条件竞争,攻击者可在获得一个较低权限的情况下通过破坏私有只读内存映射触发漏洞获取其他只读内存映射的写权限,导致本地权限提升。
详情:
当调用write系统调用向/proc/self/mem文件写入数据时,进入内核态后内核会调用get_user_pages函数获取要写入内存的地址。get_user_pages函数会调用follow_page_mask来获取这块内存的页表项,并同时要求页表项所指向的内存映射具有可写的权限。
第一次获取内存的页表项会因为缺页而失败。如果需要获取的页表项指向的是一个只读的映射,那第二次获取也会失败。这时候get_user_pages函数会第三次调用follow_page_mask来获取该内存的页表项,这时是可以成功获取的,获取成功后内核会对这个只读的内存进行强制的写入操作。
在上述流程中,缺页处理完成后后第四次调用follow_page_mask获取这块内存的页表项之后强制写入的内容也会同步到映射的只读文件中。从而导致了只读文件的越权写。
修复命令:
yum update kernel
yum update kernel-devel
yum update kernel-headers
yum update kernel-tools
yum update kernel-tools-libs
yum update python-perf |
|