
Prova de conceito de exploit para CVE-2026-24514, uma exaustão de memória por negação de serviço no webhook de admissão de validação do ingress-nginx, permitindo que atacantes com privilégios baixos derrubem os pods do controlador por meio de solicitações AdmissionReview superdimensionadas.
Vulnerabilidade remota de negação de serviço não autenticada / com privilégios baixos que permite a atacantes derrubar pods do controlador ingress-nginx por meio de solicitações AdmissionReview excessivamente grandes.
O validating admission webhook do ingress-nginx (quando habilitado) não impõe limites razoáveis ao tamanho dos objetos AdmissionReview recebidos.
Um atacante que consiga alcançar o endpoint do webhook — mesmo com apenas privilégios baixos — pode enviar payloads JSON extremamente grandes, forçando o processo do controlador a alocar quantidades massivas de memória.
As consequências incluem:
Pontuação Base CVSS v3.1
6.5 Média
String do Vetor
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Fraqueza
CWE-770: Alocação de Recursos Sem Limites ou Throttling
Créditos
Mohammed Idrees Banyamer – @banyamer_security (Jordânia)
| Componente | Versões Vulneráveis | Versões Corrigidas | Webhook Habilitado por Padrão? |
|---|---|---|---|
| ingress-nginx | < 1.13.7 | ≥ 1.13.7 | Não |
| ingress-nginx (1.14.x) | < 1.14.3 | ≥ 1.14.3 | Não |
Nota: A vulnerabilidade só se manifesta quando o recurso de validating admission webhook está explicitamente habilitado.
sequenceDiagram
participant Attacker as Atacante com privil. baixos<br>(dentro / adjacente ao 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 Processo do Controlador ingress-nginx
Note over Attacker,Controller: Pré-requisitos do ataque: webhook habilitado + endpoint acessível
Attacker->>API: 1. Criar/Atualizar recurso Ingress grande<br>OU POST direto ao endpoint do webhook
API->>WebhookConfig: 2. Disparar revisão de admissão
WebhookConfig->>AdmissionSvc: 3. Encaminhar solicitação AdmissionReview v1<br>(corpo JSON muito grande)
AdmissionSvc->>Controller: 4. Receber e começar a analisar payload enorme
activate Controller
Note right of Controller: Sem limite de tamanho do corpo da solicitação nas versões vulneráveis
Controller-->>Controller: 5. Alocar memória para strings/objetos grandes<br>(heap cresce massivamente → OOM iminente)
Controller->>AdmissionSvc: 6. (Falha / trava devido à exaustão de memória)
deactivate Controller
Kubernetes->>AdmissionSvc: 7. kubelet detecta violação do limite de memória
Kubernetes->>AdmissionSvc: 8. OOMKill no contêiner
AdmissionSvc-->>API: 9. Timeout do webhook / conexão recusada
API-->>Attacker: 10. Admissão negada ou timeout<br>(criação de Ingress falha)
Note over Attacker,Kubernetes: Resultado:
Note over Attacker,Kubernetes: • pod do ingress-nginx reiniciado / travado
Note over Attacker,Kubernetes: • perda temporária da validação de ingress
Note over Attacker,Kubernetes: • possível interrupção breve do serviço para novos ingresses
Note over Attacker,Kubernetes: • possível pressão no nó em clusters com pouca memória
Importante: Esta vulnerabilidade só deve ser demonstrada em clusters de laboratório/teste isolados com permissão explícita.
Executar isso contra ambientes de produção é ilegal e pode causar indisponibilidades.
Método de teste seguro recomendado:
# 1. Encaminhar a porta do serviço de admissão localmente
kubectl port-forward svc/ingress-nginx-controller-admission \
8443:443 -n ingress-nginx
# 2. Executar o PoC com tamanhos de payload crescentes (comece pequeno!)
python3 cve-2026-24514-Kubernetes.py https://localhost:8443/validate 25 --insecure
# 3. Monitorar memória e status dos pods em outro terminal
watch -n 2 'kubectl top pods -n ingress-nginx && kubectl get pods -n ingress-nginx'
# Exemplos mais agressivos (use com cautela)
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
Cenários de ataque realistas:
--enable-validating-webhook=false)Divulgação responsável e crédito do PoC: Mohammed Idrees Banyamer (@banyamer_security)