Kubernetes OPA Gatekeeper bypass
Reading time: 1 minute
Der ursprüngliche Autor dieser Seite ist Guillaume
Misskonfiguration ausnutzen
Regeln auflisten
Eine Übersicht kann helfen, zu wissen, welche Regeln aktiv sind, in welchem Modus und wer sie umgehen kann.
Mit der 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 und Constraint können im Open Policy Agent (OPA) Gatekeeper verwendet werden, um Regeln für Kubernetes-Ressourcen durchzusetzen.
$ kubectl get constrainttemplates
$ kubectl get k8smandatorylabels
Mit der GUI
Eine grafische Benutzeroberfläche kann ebenfalls verfügbar sein, um auf die OPA-Regeln mit Gatekeeper Policy Manager zuzugreifen. Es ist "eine einfache schreibgeschützte Web-UI zur Anzeige des Status der OPA Gatekeeper-Richtlinien in einem Kubernetes-Cluster."

Suchen Sie nach dem exponierten Dienst:
$ kubectl get services -A | grep gatekeeper
$ kubectl get services -A | grep 'gatekeeper-policy-manager-system'
Ausgeschlossene Namespaces
Wie im obigen Bild dargestellt, können bestimmte Regeln nicht universell auf alle Namespaces oder Benutzer angewendet werden. Stattdessen funktionieren sie auf einer Whitelist-Basis. Zum Beispiel ist die liveness-probe
-Einschränkung von der Anwendung auf die fünf angegebenen Namespaces ausgeschlossen.
Bypass
Mit einem umfassenden Überblick über die Gatekeeper-Konfiguration ist es möglich, potenzielle Fehlkonfigurationen zu identifizieren, die ausgenutzt werden könnten, um Privilegien zu erlangen. Suchen Sie nach auf die Whitelist gesetzten oder ausgeschlossenen Namespaces, in denen die Regel nicht gilt, und führen Sie dann Ihren Angriff dort durch.
Abusing Roles/ClusterRoles in Kubernetes
Missbrauch von ValidatingWebhookConfiguration
Eine weitere Möglichkeit, Einschränkungen zu umgehen, besteht darin, sich auf die ValidatingWebhookConfiguration-Ressource zu konzentrieren :
Kubernetes ValidatingWebhookConfiguration