Cases2 cases
1 to 2 of 2
IL-0053Unauthenticated ingress-nginx admission webhook let anyone on the pod network run code and read every Secret in the cluster (IngressNightmare, CVE-2025-1974)Wiz2025- Symptoms
This is a vulnerability report, not an outage, so nothing failed visibly. A cluster is exposed if it runs Ingress NGINX Controller older than 1.12.1 or 1.11.5 with its validating admission webhook enabled. Wiz suggests `kubectl get pods --all-namespaces --selector app.kubernetes.io/name=ingress-nginx` to find it. The webhook accepts AdmissionReview requests over HTTP without authentication from any pod, and Wiz found more than 6,500 clusters exposing it to the public internet.
- Trigger
Wiz Research reviewed the code of the Ingress NGINX admission controller and reported the first findings to Kubernetes on 31 December 2024.
- Root cause
- Component
- Contributing factor
- Detection
Found by Wiz Research in a code review of the admission controller, not by an operator.
- Remediation
- Kubernetes patched the injection flaws CVE-2025-1097, CVE-2025-1098 and CVE-2025-24514
- Kubernetes removed NGINX configuration testing from the ingress-nginx admission controller, resolving CVE-2025-1974
- released Ingress NGINX Controller 1.12.1 and 1.11.5
- Lessons
Admission webhooks often run as web servers inside the cluster without authentication and with relatively high privileges, so any pod can reach them, and the flaws pair well with SSRF in an application. Wiz concludes that `nginx -t` should be considered harmful when it processes unsanitized user input. Wiz recommends upgrading, keeping the webhook off the internet and allowing only the API server to reach it with network policies. If upgrading must wait, disable the webhook (Helm: controller.admissionWebhooks.enabled=false; manual installs: delete the ValidatingWebhookConfiguration ingress-nginx-admission and remove --validating-webhook from the controller) and enable it again after the upgrade.
IL-0072High etcd write latency made the API servers return stale data, and the production cluster flipped between two views of its stateNordstrom2017- Symptoms
A user reported that pods were starting up and then vanishing. When the cluster operators looked, kubectl get pods and kubectl get nodes returned two different sets of data that alternated back and forth, as if there were two opinions of the cluster's state.
- Trigger
etcd write latency rose far above the healthy single-digit milliseconds; the speakers say trouble starts once the database sync time crosses double digits or several hundred milliseconds.
- Root cause
- Component
- Contributing factor
- Detection
A user reported pods starting up and vanishing.
- Remediation
- restored service on a replacement cluster
- freed persistent volumes from the old cluster one by one so they could bind in the new cluster
- updated DNS records that pointed at the old cluster's load balancer names
- Action items
- Make the Kubernetes API server request quorum reads from etcd
- Lessons
etcd is extremely sensitive to write latency; once the database sync time crosses double digits of milliseconds, stale reads or badly degraded performance follow. Without quorum reads, a consistent store can still hand out stale data. Documentation for a fast-moving system changes, so read it again regularly. Moving workloads to a new cluster is hard when they hold persistent volumes or when DNS records point at generated load balancer names.
These 2 cases involve Ingress controller and Admission webhook. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.
By root cause1
Software defect2 cases
- Component
- Contributing factor
- Organisation
IL-0053Unauthenticated ingress-nginx admission webhook let anyone on the pod network run code and read every Secret in the cluster (IngressNightmare, CVE-2025-1974)Wiz2025IL-0072High etcd write latency made the API servers return stale data, and the production cluster flipped between two views of its stateNordstrom2017