
Доказательство концепции эксплуатации для CVE-2026-24514, отказа в обслуживании из-за исчерпания памяти в проверяющем admission webhook ingress-nginx, позволяющего атакующим с низкими привилегиями вызывать сбой подов контроллера с помощью запросов AdmissionReview чрезмерного размера.
Уязвимость удалённого отказа в обслуживании без аутентификации / с низкими привилегиями, позволяющая злоумышленникам вызывать сбой подов контроллера ingress-nginx с помощью чрезмерно больших запросов AdmissionReview.
Validating admission webhook компонента ingress-nginx (при включении) не устанавливает разумных ограничений на размер входящих объектов AdmissionReview.
Злоумышленник, имеющий доступ к конечной точке webhook — даже с низкими привилегиями — может отправлять чрезвычайно большие JSON-нагрузки, вынуждая процесс контроллера выделять огромные объёмы памяти.
Последствия включают:
Базовая оценка CVSS v3.1
6.5 Средний
Векторная строка
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Слабость
CWE-770: Выделение ресурсов без ограничений или регулирования
Авторы
Mohammed Idrees Banyamer – @banyamer_security (Иордания)
| Компонент | Уязвимые версии | Исправленные версии | Webhook включён по умолчанию? |
|---|---|---|---|
| ingress-nginx | < 1.13.7 | ≥ 1.13.7 | Нет |
| ingress-nginx (1.14.x) | < 1.14.3 | ≥ 1.14.3 | Нет |
Примечание: Уязвимость проявляется только при явном включении функции validating admission webhook.
sequenceDiagram
participant Attacker as Low-priv. Attacker<br>(inside / adjacent cluster)
participant API as kube-apiserver
participant WebhookConfig as ValidatingWebhookConfiguration<br>(ingress-nginx-admission)
participant AdmissionSvc as ingress-nginx-admission<br>Service / Pod
participant Controller as ingress-nginx Controller Process
Note over Attacker,Controller: Attack prerequisites: webhook enabled + reachable endpoint
Attacker->>API: 1. Create/Update large Ingress resource<br>OR direct POST to webhook endpoint
API->>WebhookConfig: 2. Trigger admission review
WebhookConfig->>AdmissionSvc: 3. Forward AdmissionReview v1 request<br>(very large JSON body)
AdmissionSvc->>Controller: 4. Receive & begin parsing huge payload
activate Controller
Note right of Controller: No request body size limit in vulnerable versions
Controller-->>Controller: 5. Allocate memory for large strings/objects<br>(heap grows massively → OOM imminent)
Controller->>AdmissionSvc: 6. (Fails / hangs due to memory exhaustion)
deactivate Controller
Kubernetes->>AdmissionSvc: 7. kubelet detects memory limit breach
Kubernetes->>AdmissionSvc: 8. OOMKill container
AdmissionSvc-->>API: 9. Webhook timeout / connection refused
API-->>Attacker: 10. Admission denied or timeout<br>(Ingress creation fails)
Note over Attacker,Kubernetes: Result:
Note over Attacker,Kubernetes: • ingress-nginx pod restarted / crashed
Note over Attacker,Kubernetes: • Temporary loss of ingress validation
Note over Attacker,Kubernetes: • Potential brief service disruption for new ingresses
Note over Attacker,Kubernetes: • Possible node pressure in low-memory clustersВажно: Данную уязвимость следует демонстрировать только в изолированных лабораторных/тестовых кластерах с явного разрешения.
Использование её против производственных сред незаконно и может вызвать простои.
Рекомендуемый безопасный метод тестирования:
# 1. Пробросьте порт admission-сервиса локально
kubectl port-forward svc/ingress-nginx-controller-admission \
8443:443 -n ingress-nginx
# 2. Запустите PoC с увеличивающимися размерами нагрузки (начните с малого!)
python3 cve-2026-24514-Kubernetes.py https://localhost:8443/validate 25 --insecure
# 3. Отслеживайте память и статус подов в другом терминале
watch -n 2 'kubectl top pods -n ingress-nginx && kubectl get pods -n ingress-nginx'
# Более агрессивные примеры (используйте с осторожностью)
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
Реалистичные сценарии атаки:
--enable-validating-webhook=false)Ответственное раскрытие и авторство PoC: Mohammed Idrees Banyamer (@banyamer_security)