Kubernetes OPA Gatekeeper bypass

O autor original desta página é Guillaume

Abusando de má configuração

Enumerar regras

Ter uma visão geral pode ajudar a saber quais regras estão ativas, em qual modo e quem pode contorná-las.

Com a 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 e Constraint podem ser usados no Open Policy Agent (OPA) Gatekeeper para impor regras em recursos do Kubernetes.

$ kubectl get constrainttemplates
$ kubectl get k8smandatorylabels

Com a GUI

Uma Interface Gráfica do Usuário também pode estar disponível para acessar as regras OPA com Gatekeeper Policy Manager. É "uma simples interface web somente leitura para visualizar o status das políticas OPA Gatekeeper em um Cluster Kubernetes."

Procure pelo serviço exposto:

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

Namespaces excluídos

Como ilustrado na imagem acima, certas regras podem não ser aplicadas universalmente em todos os namespaces ou usuários. Em vez disso, elas operam com base em uma lista de permissões. Por exemplo, a restrição liveness-probe é excluída de sua aplicação nos cinco namespaces especificados.

Bypass

Com uma visão abrangente da configuração do Gatekeeper, é possível identificar possíveis configurações incorretas que podem ser exploradas para obter privilégios. Procure por namespaces na lista de permissões ou excluídos onde a regra não se aplica e, em seguida, execute seu ataque lá.

Abusando do ValidatingWebhookConfiguration

Outra maneira de contornar as restrições é focar no recurso ValidatingWebhookConfiguration :

Referências

Last updated