Kubernetes OPA Gatekeeper bypass

El autor original de esta página es Guillaume

Abusando de la mala configuración

Enumerar reglas

Tener una visión general puede ayudar a saber qué reglas están activas, en qué modo y quién puede eludirlas.

Con la CLI

$ kubectl api-resources | grep gatekeeper
k8smandatoryannotations                                                             constraints.gatekeeper.sh/v1beta1                  false        K8sMandatoryAnnotations
k8smandatorylabels                                                                  constraints.gatekeeper.sh/v1beta1                  false        K8sMandatoryLabel
constrainttemplates                                                                 templates.gatekeeper.sh/v1                         false        ConstraintTemplate

ConstraintTemplate y Constraint se pueden utilizar en Open Policy Agent (OPA) Gatekeeper para hacer cumplir reglas en recursos de Kubernetes.

$ kubectl get constrainttemplates
$ kubectl get k8smandatorylabels

Con la GUI

Una Interfaz Gráfica de Usuario también puede estar disponible para acceder a las reglas de OPA con Gatekeeper Policy Manager. Es "una simple solo lectura interfaz web para ver el estado de las políticas de OPA Gatekeeper en un clúster de Kubernetes."

Busca el servicio expuesto:

$ kubectl get services -A | grep gatekeeper
$ kubectl get services -A | grep 'gatekeeper-policy-manager-system'

Espacios de nombres excluidos

Como se ilustra en la imagen anterior, ciertas reglas pueden no aplicarse de manera universal en todos los espacios de nombres o usuarios. En su lugar, operan en base a una lista blanca. Por ejemplo, la restricción liveness-probe está excluida de aplicarse a los cinco espacios de nombres especificados.

Bypass

Con una visión general completa de la configuración de Gatekeeper, es posible identificar posibles configuraciones incorrectas que podrían ser explotadas para obtener privilegios. Busca espacios de nombres en la lista blanca o excluidos donde la regla no se aplica, y luego lleva a cabo tu ataque allí.

Abusando de ValidatingWebhookConfiguration

Otra forma de eludir las restricciones es centrarse en el recurso ValidatingWebhookConfiguration :

Referencias

Last updated