
Exploit de prueba de concepto para CVE-2026-24514, una denegación de servicio por agotamiento de memoria en el webhook de admisión de validación de ingress-nginx, que permite a atacantes con privilegios bajos bloquear los pods del controlador mediante solicitudes AdmissionReview de gran tamaño.
Vulnerabilidad de denegación de servicio remota no autenticada / con privilegios bajos que permite a los atacantes bloquear los pods del controlador ingress-nginx mediante solicitudes AdmissionReview de tamaño excesivo.
El webhook de admisión de validación de ingress-nginx (cuando está habilitado) no impone límites razonables al tamaño de los objetos AdmissionReview entrantes.
Un atacante que pueda alcanzar el endpoint del webhook — incluso con solo privilegios bajos — puede enviar cargas útiles JSON extremadamente grandes, forzando al proceso del controlador a asignar cantidades masivas de memoria.
Las consecuencias incluyen:
Puntuación base CVSS v3.1
6.5 Media
Cadena de vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Debilidad
CWE-770: Asignación de recursos sin límites ni limitación de velocidad
Créditos
Mohammed Idrees Banyamer – @banyamer_security (Jordania)
| Componente | Versiones vulnerables | Versiones corregidas | ¿Webhook habilitado por defecto? |
|---|---|---|---|
| ingress-nginx | < 1.13.7 | ≥ 1.13.7 | No |
| ingress-nginx (1.14.x) | < 1.14.3 | ≥ 1.14.3 | No |
Nota: La vulnerabilidad solo se manifiesta cuando la función de webhook de admisión de validación está explícitamente habilitada.
sequenceDiagram
participant Attacker as Atacante con privilegios bajos<br>(dentro / adyacente al clúster)
participant API as kube-apiserver
participant WebhookConfig as ValidatingWebhookConfiguration<br>(ingress-nginx-admission)
participant AdmissionSvc as Servicio / Pod<br>ingress-nginx-admission
participant Controller as Proceso del controlador ingress-nginx
Note over Attacker,Controller: Requisitos previos del ataque: webhook habilitado + endpoint accesible
Attacker->>API: 1. Crear/Actualizar recurso Ingress grande<br>O POST directo al endpoint del webhook
API->>WebhookConfig: 2. Activar revisión de admisión
WebhookConfig->>AdmissionSvc: 3. Reenviar solicitud AdmissionReview v1<br>(cuerpo JSON muy grande)
AdmissionSvc->>Controller: 4. Recibir y comenzar a analizar la carga útil enorme
activate Controller
Note right of Controller: Sin límite de tamaño del cuerpo de la solicitud en versiones vulnerables
Controller-->>Controller: 5. Asignar memoria para cadenas/objetos grandes<br>(el heap crece masivamente → OOM inminente)
Controller->>AdmissionSvc: 6. (Falla / se cuelga debido al agotamiento de memoria)
deactivate Controller
Kubernetes->>AdmissionSvc: 7. kubelet detecta la violación del límite de memoria
Kubernetes->>AdmissionSvc: 8. OOMKill del contenedor
AdmissionSvc-->>API: 9. Tiempo de espera del webhook / conexión rechazada
API-->>Attacker: 10. Admisión denegada o tiempo de espera<br>(la creación de Ingress falla)
Note over Attacker,Kubernetes: Resultado:
Note over Attacker,Kubernetes: • Pod de ingress-nginx reiniciado / bloqueado
Note over Attacker,Kubernetes: • Pérdida temporal de la validación de ingress
Note over Attacker,Kubernetes: • Posible interrupción breve del servicio para nuevos ingresses
Note over Attacker,Kubernetes: • Posible presión en los nodos en clústeres con poca memoria
Importante: Esta vulnerabilidad solo debe demostrarse en clústeres de laboratorio/prueba aislados con permiso explícito.
Ejecutarla contra entornos de producción es ilegal y puede causar interrupciones del servicio.
Método de prueba seguro recomendado:
# 1. Reenviar el puerto del servicio de admisión localmente
kubectl port-forward svc/ingress-nginx-controller-admission \
8443:443 -n ingress-nginx
# 2. Ejecutar el PoC con tamaños de carga útil crecientes (¡empieza pequeño!)
python3 cve-2026-24514-Kubernetes.py https://localhost:8443/validate 25 --insecure
# 3. Supervisar la memoria y el estado de los pods en otra terminal
watch -n 2 'kubectl top pods -n ingress-nginx && kubectl get pods -n ingress-nginx'
# Ejemplos más agresivos (usar con precaución)
python3 cve-2026-24514-Kubernetes.py https://localhost:8443/validate 80 --insecure
python3 cve-2026-24514-Kubernetes.py https://localhost:8443/validate 150 --insecure --field-name enormousJunk
Escenarios de ataque realistas:
--enable-validating-webhook=false)Divulgación responsable y crédito del PoC: Mohammed Idrees Banyamer (@banyamer_security)