Productos FTTH

Tienda FFTH desde 2004

Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon Vulnerabilidad de 27 años en OpenBSD permite saltar autenticación PAP


Se ha revelado una vulnerabilidad de larga data en el stack de red de OpenBSD que permite a los atacantes evadir completamente la autenticación PAP. El problema se encuentra en la función sppp_pap_input() dentro del subsistema sppp(4), el cual gestiona los enlaces PPP síncronos utilizados en la conectividad PPPoE, debido a un fallo de lógica con décadas de antigüedad.




Se ha revelado una vulnerabilidad persistente en la pila de red de OpenBSD, revelando que los atacantes pueden saltarse completamente la autenticación PAP debido a un fallo de lógica con décadas de antigüedad.

El problema reside en la función sppp_pap_input() dentro del subsistema sppp(4) de OpenBSD, que gestiona los enlaces PPP síncronos utilizados en la conectividad PPPoE.

Durante la fase de autenticación PPP, los sistemas que confían en el Protocolo de Autenticación de Contraseñas (PAP) validan las credenciales del usuario antes de establecer una sesión de red.

Sin embargo, los investigadores descubrieron que esta lógica de validación ha sido fundamentalmente defectuosa desde su introducción en 1999.

Vulnerabilidad de OpenBSD de 27 años

El fallo proviene del manejo incorrecto de los campos de longitud controlados por el atacante durante la comparación de credenciales.

La lógica de validación de credenciales PAP comparaba los campos de nombre de usuario y contraseña proporcionados por el atacante utilizando bcmp(), pero confiaba en los valores de longitud tomados directamente del marco PAP entrante:

cif (name_len > AUTHMAXLEN ||
    passwd_len > AUTHMAXLEN ||
    bcmp(name, sp->hisauth.name, name_len) != 0 ||
    bcmp(passwd, sp->hisauth.secret, passwd_len) != 0) {
        /* autenticación fallida */
}

Dado que los valores de longitud cero pasan los controles de límite superior existentes, la comparación nunca falla y OpenBSD acepta incorrectamente la solicitud de autenticación sin verificar ninguna credencial.

Esto permite efectivamente una omisión completa de la autenticación, permitiendo el acceso no autorizado a las sesiones PPP. Un problema relacionado surge del mismo fallo de diseño.

Si un atacante proporciona una longitud mayor que el tamaño real de la credencial asignada, la función bcmp() lee más allá del límite de memoria previsto. Esto resulta en un sobrelectura del montón del kernel (kernel heap overread), exponiendo potencialmente el contenido de la memoria adyacente.

Esta condición se volvió explotable después de una actualización en 2009 que reemplazó los búfers de tamaño fijo por memoria asignada dinámicamente, aumentando el riesgo de acceso fuera de límites.

La vulnerabilidad es accesible a través de la ruta de datos PPPoE y no requiere credenciales válidas. Un atacante que opere un servidor PPPoE malicioso dentro del mismo dominio de difusión puede explotar este fallo para suplantar un servidor legítimo.

En un escenario de ataque exitoso:

  • El atacante completa el descubrimiento y la negociación PPPoE.
  • Envía una solicitud PAP con credenciales de longitud cero.
  • El cliente OpenBSD acepta la solicitud y establece una conexión.
  • El tráfico de red se enruta a través del punto final controlado por el atacante.

Una prueba de concepto demostró el establecimiento completo de la sesión, incluida la configuración de IP y la comunicación ICMP, confirmando la viabilidad del exploit en el mundo real.

El código vulnerable se originó en FreeBSD y se derivó inicialmente de una implementación de Cronyx Engineering que data de mediados de los años 90.

A pesar de múltiples actualizaciones a lo largo de los años, la lógica de comparación defectuosa permaneció sin cambios durante 27 años.

La corrección refleja el patrón más seguro ya presente en el manejador CHAP, añadiendo comprobaciones previas de longitud exacta antes de cualquier llamada a bcmp():

cif (name_len != strlen(sp->hisauth.name) ||
    passwd_len != strlen(sp->hisauth.secret) ||
    bcmp(name, sp->hisauth.name, name_len) != 0 ||
    bcmp(passwd, sp->hisauth.secret, passwd_len) != 0) {
        /* autenticación fallida */
}

Según el blog de Argus, el problema fue revelado responsablemente el 12 de junio de 2026 y solucionado en dos días. El parche añade controles estrictos de validación de longitud para rechazar entradas de longitud cero y excesivamente grandes antes de la comparación.

Se recomienda encarecidamente a las organizaciones que utilicen OpenBSD, particularmente en entornos que dependan de la autenticación PPPoE, que apliquen los últimos parches inmediatamente para evitar una posible explotación.


Fuentes:
https://cybersecuritynews.com/27-year-old-openbsd-vulnerability/

0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.