
CVE-2020-8554: هجوم الوسيط باستخدام LoadBalancer أو ExternalIPs
تم إنشاؤه لمعالجة CVE-2020-8554
ملاحظة: هذا المخطط (chart) مهمل لإصدار Kubernetes 1.21 وغير مدعوم بدءًا من 1.22. للتخفيف من CVE-2020-8554، قم بتمكين DenyServiceExternalIPs admission controller على المجموعة (cluster).
externalip-webhook هو webhook تحقق (validating webhook) يمنع الخدمات من استخدام عناوين IP خارجية عشوائية. يمكن لمسؤولي المجموعة (cluster) تحديد قائمة CIDRs المسموح باستخدامها كـ IP خارجي عن طريق تحديد المعامل allowed-external-ip-cidrs. سوف يسمح webhook فقط بإنشاء الخدمات التي لا تتطلب IP خارجي أو التي تكون عناوين IP الخارجية الخاصة بها ضمن النطاق المحدد من قبل المسؤول.
تم بناء هذا المستودع باستخدام kubebuilder.
لتقييد الـ IP الخارجي على CIDRs معينة، قم بإلغاء التعليق وتحديث allowed-external-ip-cidrs في webhook.yaml.
ملاحظة: إذا تم تمكين auth-proxy فقم بتحديث allowed-external-ip-cidrs في metrics_server_auth_proxy.yaml.
لنشر webhook باستخدام الملفات (manifests) في هذا المستودع، يجب أن يكون kustomize في مسار الأوامر (path). يمكنك تنزيل kustomize من هنا: https://kubernetes-sigs.github.io/kustomize/installation/
make deploy
make docker-build IMG=DOCKER_IMAGE_TAG
make deploy IMG=DOCKER_IMAGE_TAG
تم إنشاء مخطط Helm rancher-externalip-webhook لتسهيل النشر.
لتقييد الـ IP الخارجي على CIDRs معينة، قم بتعيين قيمة allowedExternalIPCidrs في أمر helm
لبناء صورة Docker لـ webhook وإنشاء إصدار جديد للمخطط (chart)
make rancher-ci
لإنشاء إصدار جديد للمخطط فقط
make rancher-chart-ci
سيتم إنشاء مراجعة Helm chart تحت مجلد build/chart. أرشيف مخطط Helm build/chart/latest/rancher-externalip-webhook-<VERSION>.tgz ومجلد مخطط Helm build/chart/rancher-externalip-webhook
نشر المخطط
helm -n externalip-webhook template rancher-externalip-webhook build/chart/latest/rancher-externalip-webhook-<VERSION>.tgz --output-dir . --set metrics.enabled=true --set metrics.prometheusExport=true
kubectl apply -R -f ./rancher-externalip-webhook
يعمل webhook افتراضيًا تحت ns externalip-validation-system. يمكن تغيير ذلك بتحديث namespace و namePrefix في ملف kustomization.yaml.
يمكن إنشاء شهادات webhook إما من خلال cert-manager أو عن طريق تحميل الشهادات (certs). يشرح القسم التالي كيفية تحقيق ذلك.
قم بإلغاء التعليق عن جميع الأقسام التي تحتوي على 'CERTMANAGER' في ملف kustomization.yaml.
webhook-server-cert في نفس namespace مثل kustomization.yaml.caBundle في manifests.yaml.يصدر webhook مقاييس webhook_failed_request_count كلما رفض عملية إنشاء أو تحديث خدمة.
قم بإلغاء التعليق عن --metrics-addr والقسم المقابل في containers.Port في webhook.yaml.
اتبع الخطوات المذكورة هنا لتصدير مقاييس webhook.
تعرف على كيفية التفاعل مع مجتمع Kubernetes على صفحة المجتمع.
يمكنك التواصل مع القائمين على هذا المشروع عبر:
المشاركة في مجتمع Kubernetes تحكمها مدونة سلوك Kubernetes.