# Kubernetes ValidatingWebhookConfiguration

**Originalni autor ove stranice je** [**Guillaume**](https://www.linkedin.com/in/guillaume-chapela-ab4b9a196)

## Definicija

ValidatingWebhookConfiguration je Kubernetes resurs koji definiše validirajući webhook, što je komponenta na serverskoj strani koja validira dolazne Kubernetes API zahteve prema skupu unapred definisanih pravila i ograničenja.

## Svrha

Svrha ValidatingWebhookConfiguration je da definiše validirajući webhook koji će sprovoditi skup unapred definisanih pravila i ograničenja na dolazne Kubernetes API zahteve. Webhook će validirati zahteve prema pravilima i ograničenjima definisanim u konfiguraciji, i vratiće grešku ako zahtev ne odgovara pravilima.

**Primer**

Evo primera ValidatingWebhookConfiguration:
```yaml
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
```
Glavna razlika između ValidatingWebhookConfiguration i politika :&#x20;

<figure><img src="../../images/Kyverno.png" alt=""><figcaption><p>Kyverno.png</p></figcaption></figure>

- **ValidatingWebhookConfiguration (VWC)** : Kubernetes resurs koji definiše validirajući webhook, što je komponenta na serverskoj strani koja validira dolazne Kubernetes API zahteve prema skupu unapred definisanih pravila i ograničenja.
- **Kyverno ClusterPolicy**: Definicija politike koja specificira skup pravila i ograničenja za validaciju i sprovođenje Kubernetes resursa, kao što su podovi, implementacije i servisi

## Enumeration
```
$ kubectl get ValidatingWebhookConfiguration
```
### Zloupotreba Kyverno i Gatekeeper VWC

Kao što možemo videti, svi instalirani operatori imaju barem jednu ValidatingWebHookConfiguration (VWC).

**Kyverno** i **Gatekeeper** su oba Kubernetes policy engine-a koji pružaju okvir za definisanje i sprovođenje politika širom klastera.

Izuzeci se odnose na specifična pravila ili uslove koji omogućavaju da se politika zaobiđe ili izmeni pod određenim okolnostima, ali to nije jedini način!

Za **kyverno**, kada postoji validirajuća politika, webhook `kyverno-resource-validating-webhook-cfg` se popunjava.

Za Gatekeeper, postoji `gatekeeper-validating-webhook-configuration` YAML datoteka.

Oba dolaze sa podrazumevanim vrednostima, ali timovi administratora mogu ažurirati te 2 datoteke.

### Upotreba slučaja
```bash
$ kubectl get validatingwebhookconfiguration kyverno-resource-validating-webhook-cfg -o yaml
```
Sada identifikujte sledeći izlaz:
```yaml
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values:
- default
- TEST
- YOYO
- kube-system
- MYAPP
```
Ovde, oznaka `kubernetes.io/metadata.name` se odnosi na ime prostora imena. Prostori imena sa imenima u `values` listi biće isključeni iz politike:

Proverite postojanje prostora imena. Ponekad, zbog automatizacije ili pogrešne konfiguracije, neki prostori imena možda nisu kreirani. Ako imate dozvolu da kreirate prostor imena, možete kreirati prostor imena sa imenom u `values` listi i politike se neće primenjivati na vaš novi prostor imena.

Cilj ovog napada je da iskoristi **pogrešnu konfiguraciju** unutar VWC kako bi zaobišao ograničenja operatera i zatim povećao svoje privilegije drugim tehnikama.

{{#ref}}
abusing-roles-clusterroles-in-kubernetes/
{{#endref}}

## Reference

- [https://github.com/open-policy-agent/gatekeeper](https://github.com/open-policy-agent/gatekeeper)
- [https://kyverno.io/](https://kyverno.io/)
- [https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/)
