Linux内核的内存子系统在处理写入时复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。(A race condition was found in the way the Linux kernel’s memory subsystem handled the copy-on-write (COW) breakage of private read-only memory mappings.)
竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。利用这一漏洞
Linux kernel >= 2.6.22(2007年发行,到2016年10月18日才修复)
一个 CVE-2016-5195 易受攻击的系统
该程序已成功用于:
RHEL7 Linux x86_64 RHEL4(4.4.7-16) Debian 7(“wheel”) Ubuntu 14.04.1 LTS Ubuntu 14.04.5 LTS Ubuntu 16.04.1 LTS Ubuntu 16.10 Linux Mint 17.2 并编译:
铿锵版本 4.0.0; gcc 版本 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12) gcc 版本 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.1) gcc 版本 4.8.5 20150623(红帽 4.8.5-4)(GCC); gcc 版本 4.8.4 (Ubuntu 4.8.4); gcc 版本 4.8.2 (Ubuntu 4.8.2-19ubuntu1) gcc 版本 4.7.2 (Debian 4.7.2-5); gcc 版本 4.4.7(带有“旧”版本)
低权限用户利用该漏洞可以再众多linux系统上实现本地提权
本地环境:Ubuntu 14.04.4 LTS
查看系统版本以及gcc版本是否在漏洞范围内
gcc -v
下载EXP:https://github.com/gbonacini/CVE-2016-5195
使用 g++ -Wall -PEDANTIC -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil 或者直接输入 make 进行编译成可执行文件
进行执行
./dcow -s
查看当前用户 id / whoami
下载exp:https://github.com/FireFart/dirtycow
使用如下命令进行编译 gcc -pthread dirty.c -o exp -lcrypt
然后执行 ./exp 或者 ./exp new_password
执行完成,查看当前用户权限
原理是利用exp获取了写入权限后,对/etc/passwd进行备份,然后对/etc/passwd进行重写,修改账户权限。优点方便快速。缺点受限与环境影响。某些环境下会失败。如果失败还是使用官方放出的exp,对/etc/passwd进行写入,写入前一定要记得先备份!