Kubernetes - OPA Gatekeeper bypass

O autor original desta página é Guillaume

Abusando da má configuração

Enumerar regras

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

Com o 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 do OPA com o Gerenciador de Políticas do Gatekeeper. É "uma simples interface web somente leitura para visualizar o status das políticas do OPA Gatekeeper em um Cluster Kubernetes."

Procure pela rota exposta:

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

Espaços de nomes excluídos

Conforme ilustrado na imagem acima, certas regras podem não ser aplicadas universalmente em todos os espaços de nomes ou usuários. Em vez disso, elas operam com base em uma lista branca. Por exemplo, a restrição liveness-probe é excluída de ser aplicada aos cinco espaços de nomes especificados.

Bypass

Com uma visão abrangente da configuração do Gatekeeper, é possível identificar potenciais configurações incorretas que poderiam ser exploradas para obter privilégios. Procure por espaços de nomes na lista branca ou excluídos onde a regra não se aplica e então execute seu ataque lá.

Abusing Roles/ClusterRoles in Kubernetes

Referências

Last updated