Kubernetes ValidatingWebhookConfiguration

该页面的原作者是 Guillaume

定义

ValidatingWebhookConfiguration 是一个 Kubernetes 资源,定义了一个验证 webhook,这是一个服务器端组件,用于根据一组预定义的规则和约束验证传入的 Kubernetes API 请求。

目的

ValidatingWebhookConfiguration 的目的是定义一个验证 webhook,该 webhook 将对传入的 Kubernetes API 请求强制执行一组预定义的规则和约束。该 webhook 将根据配置中定义的规则和约束验证请求,并在请求不符合规则时返回错误。

示例

以下是 ValidatingWebhookConfiguration 的示例:

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: example-validation-webhook
namespace: default
webhook:
name: example-validation-webhook
clientConfig:
url: https://example.com/webhook
serviceAccountName: example-service-account
rules:
- apiGroups:
- ""
apiVersions:
- "*"
operations:
- CREATE
- UPDATE
resources:
- pods

The main difference between a ValidatingWebhookConfiguration and policies :

  • ValidatingWebhookConfiguration (VWC) : 一个Kubernetes资源,定义了一个验证webhook,这是一个服务器端组件,用于根据一组预定义的规则和约束验证传入的Kubernetes API请求。

  • Kyverno ClusterPolicy: 一个政策定义,指定了一组规则和约束,用于验证和强制执行Kubernetes资源,例如pods、deployments和services

Enumeration

$ kubectl get ValidatingWebhookConfiguration

滥用 Kyverno 和 Gatekeeper VWC

正如我们所看到的,所有安装的操作员至少有一个 ValidatingWebHookConfiguration(VWC)。

KyvernoGatekeeper 都是 Kubernetes 策略引擎,提供了一个在集群中定义和执行策略的框架。

例外是指在特定情况下允许绕过或修改策略的特定规则或条件,但这并不是唯一的方法!

对于 kyverno,只要存在验证策略,webhook kyverno-resource-validating-webhook-cfg 就会被填充。

对于 Gatekeeper,有 gatekeeper-validating-webhook-configuration YAML 文件。

这两者都有默认值,但管理员团队可能会更新这两个文件。

用例

$ kubectl get validatingwebhookconfiguration kyverno-resource-validating-webhook-cfg -o yaml

现在,识别以下输出:

namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values:
- default
- TEST
- YOYO
- kube-system
- MYAPP

这里,kubernetes.io/metadata.name 标签指的是命名空间名称。values 列表中的命名空间将被排除在政策之外:

检查命名空间的存在。有时,由于自动化或配置错误,某些命名空间可能未被创建。如果您有权限创建命名空间,您可以创建一个名称在 values 列表中的命名空间,政策将不会应用于您的新命名空间。

此攻击的目标是利用 misconfiguration 在 VWC 内部,以绕过操作员的限制,然后使用其他技术提升您的权限。

参考文献

Last updated