← Back to Research

The confused deputy lives in your cluster: externalIPs, webhook redirects, and traffic you did not authorize

The one-line version. Three Kubernetes issues (CVE-2020-8554, CVE-2020-8561, and CVE-2021-25740) are all the same shape: a user with limited rights gets the highly-privileged control plane to route traffic somewhere they could not reach themselves. These are design issues with mitigations, not a patch you apply once. You have to configure the boundary yourself.

The confused-deputy problem is one of the oldest in security: a privileged component is tricked by a less-privileged actor into misusing its authority. Kubernetes, by design, is full of privileged deputies (the API server, admission controllers, the service proxy) that act on behalf of users across the whole cluster. Three CVEs that resurface in current intelligence feeds are worth studying together because they are not really three bugs; they are three faces of one structural truth: in a multi-tenant cluster, the control plane's reach is an attack surface, and you must constrain who can borrow it.

CVE-2020-8554: the externalIPs man-in-the-middle

The most impactful of the three. The Kubernetes API server, in all versions, lets a user who can create a ClusterIP Service set the spec.externalIPs field, and traffic to that external IP gets intercepted by the Service. A user with permission to create Services can therefore claim an external IP they do not own and intercept traffic destined for it: a man-in-the-middle from inside the cluster, with no special privilege beyond “can create a Service.” The related variant lets an actor who can patch a LoadBalancer Service's status set status.loadBalancer.ingress.ip to similar effect.

Crucially, there is no version you can upgrade to that simply removes this. externalIPs is a legitimate feature; the issue is that there is no built-in restriction on who can use it. The mitigation is an admission policy (historically a webhook, today a built-in ValidatingAdmissionPolicy or policy engine) that restricts or forbids externalIPs usage. The fix is something you configure, not something you install.

CVE-2020-8561: the webhook that redirects into your private network

The second issue lives in admission webhooks. An actor who controls the responses of a MutatingWebhookConfiguration or ValidatingWebhookConfiguration can redirect kube-apiserver requests to private networks of the API server: a server-side request forgery using the API server as the confused deputy. The API server, doing exactly what the webhook told it, reaches into networks the webhook's author could not reach directly. (Disclosure of the redirected response is gated on a very high log verbosity, which narrows the read primitive but not the redirect itself.)

The lesson is about who you let configure a webhook. An admission webhook is a piece of code the API server trusts implicitly on every relevant request. Permission to create or modify webhook configurations is therefore a powerful grant: it should be tightly held, and webhook endpoints should be constrained to known, internal, non-redirectable targets.

CVE-2021-25740: Endpoint/EndpointSlice confused deputy

The third rounds out the theme: a security issue where users could send network traffic to locations they would otherwise not have access to, via a confused-deputy attack involving Endpoints and EndpointSlices. Once again, the mechanism is a user steering the cluster's networking to reach a destination their own permissions would not allow, and once again, the resolution is mitigation guidance (restrict who can create Endpoints/EndpointSlices pointing at sensitive addresses) rather than a clean patch.

The common defense: constrain the deputy

Because all three are design issues, the defense is consistent and it is yours to configure:

The audit is read-only: confirm the mitigations exist, rather than attempting the interception:

# Confused-deputy mitigations present? (read-only posture audit)
# 1) Is externalIPs restricted by admission policy?
kubectl get validatingadmissionpolicy,validatingwebhookconfiguration 2>/dev/null \
  | grep -i 'externalip\|service'
# 2) Who can create Services / webhooks / Endpoints (the deputy-borrowing rights)?
kubectl auth can-i create services --as=system:serviceaccount:tenant-a:default
kubectl auth can-i create validatingwebhookconfigurations --as=system:serviceaccount:tenant-a:default
kubectl auth can-i create endpointslices --as=system:serviceaccount:tenant-a:default
# 3) Default-deny network policy in tenant namespaces?
kubectl get networkpolicy -A | grep -i 'default-deny'
# FINDING = a tenant can set externalIPs / configure webhooks / create endpoints
# with no admission backstop and no default-deny. Mitigations present = PASS.

Why old CVEs still matter

It would be easy to dismiss 2020-era CVEs as solved history. They are not, precisely because they have no clean patch: a freshly built cluster in 2026 is exposed to all three unless someone configured the mitigations. They keep surfacing in intelligence feeds for the same reason: they describe permanent properties of how Kubernetes routes traffic, and every new multi-tenant cluster re-inherits them. The control plane's reach is a feature; whether it is also a vulnerability is decided entirely by your RBAC and admission policy.

How Celvex Sentry tests for this

Our continuous-monitoring suite audits clusters for the confused-deputy mitigations directly: whether externalIPs is restricted, whether webhook-configuration and Endpoint creation rights are tightly held, and whether default-deny network policy is in place. Because these are design issues, the finding is the absence of the mitigation for a reachable tenant: we confirm it read-only, never by performing the interception. When a tenant can borrow the control plane's reach with no backstop, we mint a Proof Capsule with the can-i evidence and the admission-policy remediation attached. When the mitigations are present, we record a PASS.

Sources

Get your exposure check: full report in 4-24 hours

Real assessment on production-grade infrastructure. We prove what is exploitable and attach the fix. Paying customers get priority capacity.

Queue My Assessment