PoC - Ingress-NGINX Admission Controller File Descriptor Injection to RCE (Varios CVE asociados)

Resumen

Desarrollé una Proof of Concept (PoC) que demuestra una vulnerabilidad crítica de Remote Code Execution (RCE) en Ingress-NGINX Admission Controller, explotable mediante File Descriptor Injection a través del webhook de admisión.

La PoC demuestra que es posible abusar del manejo de descriptores de archivo (/proc/<pid>/fd/) para forzar la carga de una biblioteca compartida maliciosa, logrando la ejecución arbitraria de código en el contexto del controlador ingress-nginx.

El exploit fue verificado en un entorno Kubernetes real y publicado en Exploit Database (EDB-ID 52475).

Detalle técnico

  • Producto afectado: Ingress-NGINX Admission Controller

  • Versiones afectadas: v1.10.0 a v1.11.1 (potencialmente otras)

  • CVEs asociados:

    • CVE-2025-1097

    • CVE-2025-1098

    • CVE-2025-24514

    • CVE-2025-1974

  • Componente vulnerable: Admission Webhook

  • Tipo de vulnerabilidad: File Descriptor Injection → Remote Code Execution

  • Tipo de ataque: Remoto

  • Impacto: Ejecución de código arbitrario y acceso a secretos del cluster

Descripción de la PoC

La PoC demuestra que el Admission Controller de ingress-nginx puede ser forzado a procesar rutas arbitrarias bajo /proc/<pid>/fd/, permitiendo a un atacante interactuar con descriptores de archivo abiertos por el proceso.

Mediante una combinación de:

  • Carga de una biblioteca compartida maliciosa (.so),

  • Manipulación de rutas internas usando /proc,

  • Envío de peticiones especialmente construidas al webhook de admisión,

es posible provocar la ejecución automática de código cuando la biblioteca maliciosa es cargada en memoria.

La PoC incluye la generación dinámica de un .so que establece una reverse shell cuando es cargado por el proceso vulnerable.

Comportamiento demostrado

  • Fuerza bruta de descriptores de archivo válidos (/proc/<pid>/fd/<n>).

  • Carga de una biblioteca compartida controlada por el atacante.

  • Ejecución automática de código al cargarse la librería (constructor).

  • Obtención de ejecución remota de comandos en el contexto del controlador.

  • Potencial acceso a Secrets del cluster Kubernetes.

Entorno de pruebas

  • Sistema operativo: Ubuntu 22.04

  • Plataforma: Kubernetes (RKE2)

  • Componente: Ingress-NGINX Admission Controller v1.11.1

  • Herramientas empleadas:

    • Python

    • requests

    • gcc

    • Kubernetes (cluster local)

  • Escenario: Entorno de laboratorio / cluster controlado

Impacto

Un atacante remoto podría explotar esta vulnerabilidad para:

  • Ejecutar código arbitrario en el controlador ingress-nginx.

  • Acceder a secretos del cluster (tokens, credenciales, certificados).

  • Comprometer múltiples servicios expuestos a través del Ingress.

  • Escalar el impacto a nivel de cluster Kubernetes completo.

El impacto es crítico, especialmente en despliegues donde el controlador tiene acceso amplio a recursos del cluster.

Mitigaciones recomendadas

  • Actualizar ingress-nginx a una versión corregida cuando esté disponible.

  • Restringir el acceso de red al Admission Webhook.

  • Aplicar políticas de NetworkPolicy estrictas.

  • Ejecutar el controlador con permisos mínimos.

  • Monitorizar accesos anómalos al webhook de admisión.

  • Revisar configuraciones que permitan inyección de rutas internas.

Referencias

triangle-exclamation

Last updated