Kubernetes OPA Gatekeeper bypass

рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рдореВрд▓ рд▓реЗрдЦрдХ рд╣реИрдВ Guillaume

рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ

рдирд┐рдпрдореЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ

рдПрдХ рдЕрд╡рд▓реЛрдХрди рд╣реЛрдирд╛ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реЗ рдирд┐рдпрдо рд╕рдХреНрд░рд┐рдп рд╣реИрдВ, рдХрд┐рд╕ рдореЛрдб рдореЗрдВ рд╣реИрдВ рдФрд░ рдХреМрди рдЗрд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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 рдФрд░ Constraint рдХрд╛ рдЙрдкрдпреЛрдЧ Open Policy Agent (OPA) Gatekeeper рдореЗрдВ Kubernetes рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

$ kubectl get constrainttemplates
$ kubectl get k8smandatorylabels

With the GUI

рдПрдХ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЧреЗрдЯрдХреАрдкрд░ рдкреЙрд▓рд┐рд╕реА рдореИрдиреЗрдЬрд░ рдХреЗ рд╕рд╛рде OPA рдирд┐рдпрдореЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ "рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ OPA рдЧреЗрдЯрдХреАрдкрд░ рдиреАрддрд┐рдпреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдкрдврд╝рдиреЗ-рдХреЗ-рд▓рд┐рдП рд╡реЗрдм UI рд╣реИред"

рдЦреБрд▓реЗ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ :

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

Excluded namespaces

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХреА рдЫрд╡рд┐ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреБрдЫ рдирд┐рдпрдо рд╕рднреА namespaces рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдкрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╡реЗ рдПрдХ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, liveness-probe рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдкрд╛рдВрдЪ рдирд┐рд░реНрджрд┐рд╖реНрдЯ namespaces рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред

Bypass

Gatekeeper рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЕрд╡рд▓реЛрдХрди рдХрд░рддреЗ рд╣реБрдП, рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЛрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрди рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯреЗрдб рдпрд╛ рдмрд╛рд╣рд░ рдХрд┐рдП рдЧрдП namespaces рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛, рдФрд░ рдлрд┐рд░ рд╡рд╣рд╛рдБ рдЕрдкрдирд╛ рд╣рдорд▓рд╛ рдХрд░реЗрдВред

Abusing ValidatingWebhookConfiguration

рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ ValidatingWebhookConfiguration рд╕рдВрд╕рд╛рдзрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ :

References

Last updated