
CVE-2019-5736용 C 기반 PoC
이 저장소는 CVE-2019-5736에 대한 C 기반 개념 증명 익스플로잇을 포함합니다.
이 취약점은 악의적인 Docker 컨테이너가 호스트의 runc 바이너리를 덮어쓰고 호스트에서 루트 권한으로 임의의 명령을 실행할 수 있게 하여 호스트 시스템을 완전히 손상시킵니다.
Frichetten의 원본 Go 기반 PoC에서 영감을 받았습니다.
이 코드는 교육 목적으로만 제공됩니다. 소유하지 않거나 테스트 권한이 없는 시스템에서 실행하지 마세요. 오용 시 법적 책임을 질 수 있습니다.
.
├── docker/
│ └── Dockerfile
├── lib/
│ └── exploit.h
├── scripts/
│ ├── build_docker.sh
│ ├── purge_docker_installation.sh
│ ├── setup_env.sh
│ ├── start_docker.sh
│ └── trigger_exploit.sh
├── src/
│ ├── exploit.c
│ └── main.c
├── LICENSE
├── Makefile
└── README.md
이 익스플로잇은 다음 환경에서 테스트되었습니다:
sudo ./scripts/install_dependencies.sh
참고: 이미
wget과build-essential을 설치했다면 안전하게 건너뛸 수 있습니다.
sudo ./scripts/setup_env.sh
이 스크립트는 systemd나 소켓 활성화 없이 Docker를 설치합니다. VM 랩에 적합합니다.
sudo dockerd
참고: 백그라운드에서 실행하려면 두 번째 터미널이 필요합니다.
sudo ./scripts/build_docker.sh
이 스크립트는 익스플로잇을 컴파일하고 바이너리를 포함한 Docker 이미지를 빌드합니다.
참고:
make를 실행하여 수동으로 익스플로잇 바이너리를 빌드할 수도 있습니다.
Docker를 완전히 제거하고 시스템을 설치 전 상태로 복원할 수 있습니다:
sudo ./scripts/purge_docker_installation.sh
먼저 익스플로잇 컨테이너를 시작합니다. 다음 명령어를 사용하거나:
sudo docker run -it --name exp --rm runc_exploit
포함된 셸 스크립트를 사용할 수 있습니다:
sudo ./scripts/start_docker.sh
컨테이너 내부에서 이제 익스플로잇 바이너리를 실행할 수 있습니다:
./exploit -c "$COMAND"
바이너리는 세 가지 인수를 받습니다:
-h는 사용법 메시지를 출력하고,-c는 호스트에서 실행할 명령어 문자열 페이로드를 정의합니다. 마지막-d인수는 실행 중 디버그 출력을 토글합니다. (예:/proc의 정보 구문 분석)
참고:
-c인수가 제공되지 않으면 익스플로잇은cp /etc/shadow > /tmp/pwned && chmod 644 /tmp/pwned를 실행합니다.
이제 익스플로잇은 호스트에서 들어오는 runc 프로세스를 기다립니다.
sudo ./scripts/trigger_exploit.sh
이 스크립트는 컨테이너 내에서 bin/sh를 실행하는 새 프로세스를 열어 익스플로잇을 트리거합니다.
참고: 호스트에서 수동으로
docker exec를 실행하여 익스플로잇을 트리거할 수도 있지만, 현재 PoC 버전이 작동하려면 타이밍이 중요하므로 몇 번 시도해야 할 수도 있습니다...
runc가 성공적으로 익스플로잇되면 다음과 유사한 출력이 표시됩니다:

이제 손상된 shadow 파일을 열 수 있습니다:
