freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CVE-2019-5736漏洞复现
2023-10-12 22:10:59

一、漏洞简介

我们在执行功能类似于docker exec命令时,底层实际上是容器运行时在操作,例如runc。它的最终效果是在容器内执行用户指定的程序。

执行过程大致是这样的:runc启动,加入到容器命名空间,接着以自身(/proc/self/exe)为范本启动一个子进程,最后通过exec系统调用执行用户指定的二进制程序。

那么假设这样一种情况:在runc exec加入到容器的命名空间后,容器内进程已经能够通过内部/proc观察到它,此时如果打开/proc/[runc-PID]/exe去写入一些内容,就能够实现将宿主机上的runc二进制程序覆盖掉。这样一来,下次用户调用runc去执行命令时,实际执行的是攻击者写入的命令。

利用条件:docker version <18.09.2 runc version <=1.0-rc6

参考:容器逃逸成真:从CTF解题到CVE-2019-5736漏洞挖掘分析

二、漏洞复现

环境搭建

方法一:metarget一键部署
image.png
image.png
方法二:手动搭建
安装特定版本docker
安装特定版本runc
截图 (1).png

POC

  1. 参考:https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go

  2. 代码第20行填入待执行的命令:
    image.png

  3. 编译poc
    image.png

复现步骤

  1. 因为该漏洞会破坏runc,所以先备份:
    image.png

  2. 起一个容器并将poc复制到容器内
    image.png

  3. 进入容器,执行poc
    image.png

  4. poc程序进入等待状态,这时我们另开一个终端窗口,在host上通过docker exec执行容器上的/bin/sh
    image.png
    POC执行成功:
    image.png

  5. /tmp目录下存在我们创建的文件夹,即命令成功执行:
    image.png

三、对poc的一些测试

测试一

容器运行poc,在宿主机上运行docker exec ** ls /
截图 (2).png
poc执行成功,但这时payload被写到哪里了呢?
截图 (3).png
容器中执行cat /bin/ls
截图 (4).png
可见payload被写进了容器的/bin/ls二进制程序中,现在去容器中执行ls就等于执行payload

测试二

在抓取pid这里,我们输出一下看看,是什么匹配到了runc(即看一下此时的/proc/pid/cmdline)
截图 (5).png
先试一下正常的复现流程:
截图 (6).png
截图 (7).png
再重新试一下宿主机运行docker exec ** ls /
截图 (8).png
截图 (9).png
可见,匹配到runc的/proc/pid/cmdline一直都是docker-runcinit

测试总结

由测试一可知,用docker exec执行容器里的任意命令,该命令的二进制程序就会被payload覆盖掉。
由测试二可知,抓取pid那里,docker exec执行任意命令,其/proc/pid/cmdline都是"docker-runcinit",因为docker exec就是容器运行时(runc)在操作。
所以,POC执行时,
(1) 我们先把容器内的/bin/sh的二进制程序覆盖为#!/proc/self/exe
截图 (10).png
(2)执行docker exec ** /bin/sh ,由测试一的结论可知/bin/sh的二进制程序(即#!/proc/self/exe)会被payload覆盖掉。那这个/proc/self/exe指向谁?由测试二的结论可知docker exec是runc在操作,所以self就是runc。故这里最终实现了payload覆盖runc。
截图 (11).png

# 漏洞 # 容器逃逸
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
  • 0 文章数
  • 0 关注者
文章目录