docker逃逸漏洞復現(CVE-2019-5736)


漏洞概述

  • 2019年2月11日,runC的維護團隊報告了一個新發現的漏洞,SUSE Linux GmbH高級軟件工程師Aleksa Sarai公布了影響Docker, containerd, Podman, CRI-O等默認運行時容器runc的嚴重漏洞CVE-2019-5736。漏洞會對IT運行環境帶來威脅,漏洞利用會觸發容器逃逸、影響整個容器主機的安全,最終導致運行在該主機上的其他容器被入侵。漏洞影響AWS, Google Cloud等主流雲平台。攻擊者可以通過特定的容器鏡像或者exec操作可以獲取到宿主機的runC執行時的文件句柄並修改掉runc的二進制文件,從而獲取到宿主機的root執行權限。

漏洞原理

  • 漏洞點在於runC,RunC是一個容器運行時,最初是作為Docker的一部分開發的,后來作為一個單獨的開源工具和庫被提取出來。作為“低級別”容器運行時,runC主要由“高級別”容器運行時(例如Docker)用於生成和運行容器,盡管它可以用作獨立工具。像Docker這樣的“高級別”容器運行時通常會實現鏡像創建和管理等功能,並且可以使用runC來處理與運行容器相關的任務:創建容器、將進程附加到現有容器等。在Docker 18.09.2之前的版本中使用了的runc版本小於1.0-rc6,因此允許攻擊者重寫宿主機上的runc 二進制文件,攻擊者可以在宿主機上以root身份執行命令。

利用方式

  • docker 18.09.2之前的runc存在漏洞,攻擊者可以修改runc的二進制文件導致提權。

影像版本

  • docker version <=18.09.2 RunC version <=1.0-rc6

環境搭建

第一步:卸載已將安裝的docker

sudo apt-get remove docker docker-engine docker-ce docker.io

第二步:安裝前准備

1. 更新索引包

sudo apt-get update

2、安裝以下包,以使apt 可以通過https 使用repository

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

3、添加Docker官方的GPG密鑰並更新索引包

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

sudo apt-get update

第三步安裝指定的docker版本

1、列出可用版本

apt-cache madison docker-ce

2、選擇一個版本來安裝

sudo apt-get install docker-ce=18.06.1~ce~3-0~ubuntu

漏洞復現

  1. 生成payload

https://github.com/Frichetten/CVE-2019-5736-PoC
將此內容進行更改,設置nc監聽地址。

  1. 編譯生成payload

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

  1. 開始攻擊

將該payload拷貝到docker容器中(這就是模擬攻擊者獲取了docker容器權限,在容器中上傳payload進行docker逃逸)

  1. xshell重新打開一個選項卡,進入容器。(sh啟動)

docker exec -it ‘容器ID’/bin/sh

攻擊者開啟nc監聽

受害者啟動docker容器時,觸發payload,成功反彈shell。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM