CVE-2025-9074 (교육용 PoC・개념 실증 코드)
이 리포지토리는 Docker Engine의 인증되지 않은 원격 API를 악용하여 호스트 파일 시스템에 읽기/쓰기가 가능한 특권 컨테이너를 생성할 수 있는 위험을 교육 목적으로 실증하는 PoC를 포함합니다.
실행 파일은 poc.go입니다.
중요: 본 PoC는 교육・방어 목적으로만 사용하십시오. 제3자의 환경이나 허가되지 않은 시스템에서의 실행은 금지됩니다.
위험성 평가
- 종합 평가: 크리티컬
- 예상 CVSS v3.1 기본 값: 9.8 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
- 근거:
- 인증 없이 TCP/2375에 도달 가능 → PR:N, UI:N, AV:N
- 특권 컨테이너 + 호스트 바인드 마운트로 인해 범위 변경과 기밀성/무결성/가용성이 높은 영향 → S:C, C/I/A:H
- 공격 절차는 Docker Engine API에 대한 소수의 HTTP 요청으로 성립 → AC:L
- 영향 범위:
- 호스트 OS 전체, 다른 컨테이너, 동일 네트워크 상의 자산 (자격 증명 도용・횡적 확산 포함)
- 실행 권한:
- 인증되지 않음 (PR:N). 관리자 권한 불필요
배경
- Docker Engine은 원격 API를 제공하며,
/version 및 /info, /containers/create 등의 엔드포인트를 통해 조작할 수 있습니다.
- 외부에서 컨테이너에 도달 가능한 상태라면, 인증 없이 컨테이너 생성・특권 부여・호스트 디렉터리를 바인드 마운트하는 작업이 가능해지는 경우가 있습니다.
- Windows + Docker Desktop 환경에서는
/run/desktop/mnt/host/<drive> 및 /host_mnt/<drive>를 통해 Windows 호스트 드라이브에 접근할 수 있는 마운트 경로가 존재합니다. 본 PoC는 그 경로를 이용하여 호스트 상의 파일 생성으로 영향을 시각화합니다.
동작 개요
poc.go는 다음을 수행합니다:
http://192.168.65.7:2375에 대해 Docker Engine API를 호출하여 통신 확인 (/version)을 수행
- 사용 가능한 이미지 목록 (
/images/json)을 확인하고, 없으면 alpine:latest 풀을 시도
- 특권 컨테이너를 생성하고, 호스트 드라이브 (예: C:, N:)를
/host_root에 바인드 마운트
- 컨테이너 내에서
/host_root 바로 아래에 검증용 파일 (예: cve_2025_9074_poc.txt)을 작성하여 영향을 시각화
- 실행 후 컨테이너 삭제
위험 (예상되는 악용)
- 호스트 파일 시스템 읽기/쓰기 (Docker Engine 실행 권한 범위 내)
- 기밀 정보 (비밀번호, SSH 키 등) 도용
- 시스템 설정 파일 변조
- 악성 소프트웨어 설치, 지속화
- 다른 컨테이너・네트워크로의 횡적 확산
- 권한 상승
필요 조건
- Go 1.20+ 정도 (
go run으로 동작)
- (취약점이 있는) Docker Desktop/Engine이 실행 중
- (취약점이 있는) Docker Desktop/Engine 상에서 실행 중인 Docker 컨테이너 내에서 본 코드를 실행할 것
- Docker Engine API가
http://192.168.65.7:2375에서 응답하는 상태 (PoC 기본값)
사용 방법
-
리포지토리 획득
git clone <this-repo>
cd cve-2025-9074
-
PoC 실행
-
출력 예
/version에 대한 통신 성공 표시
- 사용 이미지 검출 또는
alpine:latest 풀
- 특권 컨테이너 생성, 호스트에 파일 생성 결과
/info 기반 시스템 정보 발췌 표시
-
데모를 위한 curl 예시 (화면에 출력됨)
/containers/create에 대한 JSON 예, /containers/{id}/start 시작 예
설정 커스터마이징
attemptHostWrite 내의 후보 배열 (/run/desktop/mnt/host/<drive>, /host_mnt/<drive>, C:/ 등)을 환경에 맞게 조정 가능합니다.
- 사용 이미지
- 기존 이미지 우선. 없으면
alpine:latest를 자동 풀.
검증 환경 주의
- Windows + Docker Desktop에서의 동작을 전제로 한 마운트 경로 예시가 포함됩니다.
- macOS의 경우, 호스트 경로가 다르므로 적절히 수정해야 합니다.
- Docker Desktop 버전이나 설정에 따라 PoC가 성립하지 않는 (=안전한) 경우가 있습니다.
면책 사항
- 본 리포지토리는 연구・교육 목적으로만 의도되었습니다. 공격・침입・파괴 행위를 조장하지 않습니다.
- 본 PoC의 사용으로 인해 발생한 어떠한 손해에 대해서도 작성자는 책임을 지지 않습니다.
- 자신이 정당한 관리 권한을 가진 격리 환경 이외에서 실행하지 마십시오.
라이선스