[하루한줄] CVE-2022-23648: 호스트 파일에 접근 가능한 containerd 취약점

URL

Issue 2244: containerd: Insecure handling of image volumes

Target

  • Containers

Explain

docker와 같은 container runtime인 containerd의 CRI(Container Runtime Interface) 플러그인에서 컨테이너가 임의의 호스트 파일 및 디렉터리에 액세스할 수 있는 취약점의 세부 정보가 공개되었습니다.

컨테이너의 표준 이미지 포맷인 OCI(Open Contianer Image)에는 JSON 구성파일이 포함되어 있습니다. 이중 이미지를 컨테이너화 할때 containerd 프로세스가 컨테이너 인스턴스에 특정 데이터를 쓸 수 있도록 볼륨을 지정하는 경로를 설정할 수 있습니다.

if len(volumeMounts) > 0 {
	mountMap := make(map[string]string)
	for _, v := range volumeMounts {
		mountMap[filepath.Clean(v.HostPath)] = v.ContainerPath /// vulnerability
	}
	opts = append(opts, customopts.WithVolumes(mountMap))
}

ContainerPath 속성은 해커가 제어하는 이미지의 JSON 구성에서 가져오며 컨테이너 rootfs의 ContainerPath 아래의 모든 파일을 HostPath의 임시 디렉터리로 복사해 임의의 데이터를 쓸 수 있도록 하고, 이후 같은 위치의 컨테이너에 마운트됩니다.

그러나 이 ContainerPath 속성의 경로 검사가 충분하지 않아 컨테이너 경로가 아닌 호스트의 경로를 지정할 수 있고, 호스트의 임의 파일을 컨테이너에 마운트해 접근 및 수정할 수 있는 path traversal 취약점이 발생합니다.

FROM registry.access.redhat.com/ubi8/ubi
VOLUME /../../../../../../../../var/lib/kubelet/pki/
ENTRYPOINT "/bin/bash"

해커는 제어 가능한 이미지에 포함되는 위 PoC로 호스트의 자격증명 등을 알아내는 등 취약점을 악용할 수 있습니다.