
CVE-2024-21626에 대한 개념 증명 익스플로잇, Docker/runc의 컨테이너 이스케이프 취약점입니다. 파일 디스크립터 조작을 통해 컨테이너 격리를 벗어나는 방법을 보여줍니다. 교육 및 연구 목적으로만 사용하세요.
교육/연구 목적으로만 사용하십시오. 교육/연구와 관련 없는 행동으로 인한 위험은 사용자 본인이 책임집니다.
docker build . -t cve-2024-21626
docker run -it --rm cve-2024-21626 bash /poc.sh
# 另起一个terminal
/bin/bash.copy
다른 docker/runc 버전에서 사용하는 구체적인 파일 디스크립터가 다릅니다. 예를 들어 docker server:20.10.17 && runc version 1.1.2의 경우 /proc/self/fd/9를 사용합니다. 실제 fd는 파일이 열린 순서에 따라 변경될 수 있으며, 공식 문서에서는 대부분의 경우 /proc/self/fd/7을 사용해야 한다고 명시합니다. 실제 사용되는 fd를 확인하려면 runc를 직접 컴파일하고 nsexec 함수에서 sleep을 추가하면 됩니다.
#使用ps 找到对应runc init进程的pid
ps -ef | grep runc
# 查看指向/sys/fs/cgroup的fd
ls -lh/proc/{pid runc init}/fd
수정: Dockerfile에서 WORKDIR을 해당 값으로 변경하십시오.
다음 조건을 모두 충족해야 합니다:
1. 可以创建容器并指定执行命令
2. 可以指定容器使用的镜像
TODO
https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv
https://github.com/opencontainers/runc/commit/2a4ed3e75b9e80d93d1836a9c4c1ebfa2b78870e