[하루한줄] 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로 호스트의 자격증명 등을 알아내는 등 취약점을 악용할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.