cve-2016-5195 漏洞处理说明

详见以下链接:

cve-2016-5195

360 bobao

redhat mitigation

漏洞影响描述:

A race condition was found in the way Linux kernel's memory subsystem
handled breakage of the read only private mappings COW situation on
write access.

An unprivileged local user could use this flaw to gain
write access to otherwise read only memory mappings and thus increase
their privileges on the system.

Linux内核的内存子系统在处理写时拷贝(Copy-on-Write)时存在条件竞争漏洞,导致可以破坏私有只读内存映射。一个低权限的本地用户能够利用此漏洞获取其他只读内存映射的写权限,有可能进一步导致提权漏洞.

该漏洞从 2005 年就开始出现, 直到今年的 10 月18 号才修补, 内核 >= 2.6.22 版本的都会受此影响. 以下为按照 redhat 给出的临时方式进行测试, 测试程序从 github-dirtycow 上获得.

测试情况

系统环境:

centos 7,  Linux cz-centos7 3.10.0-327.36.2.el7.x86_64

在运行 stp 脚本前可以看到测试程序能够通过 mmap 来改写文件.

[root@cz-centos7 dirtycow.github.io]# ./dirtyc0w foo m00000000000000000
mmap e8aaa000

procselfmem 1800000000

madvise 0

[root@cz-centos7 dirtycow.github.io]# cat foo 
m00000000000000000

安装 rpm 包: kernel-debuginfo, kernel-debuginfo-common, 需要和 kernel 的版本一样, 再运行 stp 脚本.

[root@cz-centos7 dirtycow.github.io]# stap -g st.stp 

Message from syslogd@cz-centos7 at Oct 21 07:58:51 ...
 kernel:CVE-2016-5195 mitigation loaded
 # 此时开始在另一个会话执行 dirtyc0w 程序, 如下一步所示, 执行完后 ctrl + c 结束 stp 脚本运行
^C  
Message from syslogd@cz-centos7 at Oct 21 08:03:42 ...
 kernel:CVE-2016-5195 mitigation unloaded

在 st.stp 运行加载的过程中执行命令, 如下所以, 文件不再被改写:

[root@cz-centos7 dirtycow.github.io]# ./dirtyc0w foo1 m00000000000000000
mmap 695a5000

madvise 0

procselfmem 0

[root@cz-centos7 dirtycow.github.io]# cat foo1 
this is not test
[root@cz-centos7 dirtycow.github.io]#

总结

dirtyc0w 程序能改写 centos 7 下的文件, centos 5,6 不生效, 因为 /proc/self/mem 文件默认不可写. stp 脚本可以当做一个缓解的方案, 机器重启后还是会受影响, 要彻底根除, 可以更新 redhat 释放出新的 kernel 版本, 见 redhat -2016-2098