1.环境准备CVE-2019-5736验证环境需要的文件
1.1准备docker
docker18.03
docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
docker-ce-cli-19.03.9-3.el7.x86_64.rpm
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
container-selinux-2.9-4.el7.noarch.rpm
参考以下文章完成docker搭建
1.2准备镜像
由于制作的docker服务里面一个镜像都没有,所以我们还需要制作基础镜像
参考以下文章制作镜像
一种docker基础镜像制作方法 一种docker基础镜像制作方法_hjh00的博客-CSDN博客
1.3准备Go环境
目标:go1.9
参考该篇完成golang环境的部署
CentOS7 编译安装golang和rpm安装golang_weixin_30521161的博客-CSDN博客
1.4POC文件准备
对应的poc文件在github上可以直接下载:GitHub - Frichetten/CVE-2019-5736-PoC: PoC for CVE-2019-5736
采用以下命令编译poc文件
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
1.5复现操作
- 启动镜像 docker run test01:1.0 'tail -f /dev/null' 生成容器:ae477e005288;
- 将该payload拷贝到docker容器中 docker cp main ae477e005288:/home;
- 进入容器 docker exec -it ae477e005288 ;
- 运行poc,cd /home , ./main ,到这里poc运行成功,已成功替换宿主机上runc二进制文件,等待下次启动镜像的时候就会直接执行poc里面的命令操作宿主机上的文件;
1.6防范
将采用18.09以后版本的docker版本即可避免这个问题
所有文件均可在网上找到,嫌麻烦的在以下包中也可下载到
CVE-2019-5736-PoC验证环境需要的文件docker18.03,go1.9-系统安全文档类资源-CSDN下载