Bypassing Kyverno Policies via Double Policy Exceptions
Date: 2026-01
Affected: go/github.com/kyverno/kyverno
Attack vector: auth-bypass
Category: vulnerability-disclosure
Severity: Critical
CWE: CWE-284
CVSS: 9 (CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H)

### Summary If a cluster has a `Kyverno` policy in enforce mode and there are two exceptions, this allows the policy to be bypassed, even if the first exception is more restrictive than the second. ### Details The following policy was applied: ```yaml apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: disallow-host-path annotations: policies.kyverno.io/title: Disallow hostPath policies.kyverno.io/category: Pod Security Standards (Baseline) policies.kyverno.io/severity: medium policies.kyverno.io/subject: Pod,Volume kyverno.io/kyverno-version: 1.6.0 kyverno.io/kubernetes-version: "1.22-1.23" policies.kyverno.io/description: >- HostPath volumes let Pods use host directories and volumes in containers. Using host resources can be used to access shared data or escalate privileges and should not be allowed. This policy ensures no hostPath volumes are in use. spec: validationFailureAction: Enforce background: true rules: - name: host-path match: any: - resources: kinds: - Pod validate: message: >- HostPath volumes are forbidden. The field spec.volumes[*].hostPath must be unset. pattern: spec: =(volumes): - X(hostPath): "null" ``` And two exceptions: ```yaml apiVersion: kyverno.io/v2beta1 kind: PolicyException metadata: name: disallow-host-path-exception namespace: kyverno spec: exceptions


Mitigations:

Architectural layers (MAESTRO):