OpenBSD tenía un bug de 27 años que dejaba pasar cualquiera sin clave

OpenBSD tenía un bug de 27 años que dejaba pasar cualquiera sin clave

OpenBSD tenía un bug de 27 años que dejaba pasar cualquiera sin clave

Una wea que nadie cachó por 27 años

Me levanté hoy y me encontré con una noticia que me dejó con la boca abierta: OpenBSD, el sistema operativo que todo el mundo considera el más seguro del planeta, tenía un bug de autenticación que permitía conectarse sin clave durante 27 años. Sí, leíste bien. Veintisiete años. Desde 1999.

El problema estaba en el código del subsistema PPP, específicamente en la función sppp_pap_input(). La cuestión era tan simple que da vergüenza: usaban bcmp() con un largo controlado por el atacante. Si mandabas un largo de cero, bcmp(buf, ref, 0) siempre retorna 0, o sea, «todo match». Con eso, un atacante podía establecer una conexión PPPoE completa sin credenciales. Nada. Cero. La raja.

La ironía de la seguridad «imposible de romper»

Aquí es donde me pongo a pensar. OpenBSD es famoso por sus auditorías de código, su filosofía de seguridad por defecto, y que sus desarrolladores se creen los más pulentos del área. Y con razón, la verdad. Pero este caso demuestra algo que yo aprendí hace años en la pega: no importa cuántos ojos revisen el código, siempre queda algo escondido.

El bug fue introducido en 1999 cuando importaron el driver desde FreeBSD. En 2009, cuando cambiaron los campos de autenticación de arreglos fijos a memoria dinámica, el problema se transformó en algo aún peor: no solo podías bypassar la autenticación, sino que también podías leer memoria del kernel que no te correspondía. Un heap over-read de hasta 192 bytes si configurabas bien el ataque.

Lo más loco es que el handler de CHAP tenía la validación correcta desde el principio. PAP nunca se actualizó. Alguien en algún momento cachó el patrón seguro, lo aplicó a CHAP, y se le olvidó revisar PAP. Eso me pasa a mí todo el día cuando programo: arreglo algo en un lado y me olvido del otro.

¿Qué significa esto para nosotros?

En términos prácticos, si eres un proveedor de internet que usa OpenBSD para tus concentradores PPPoE, o si tienes infraestructura crítica corriendo sobre esto, actualiza ya. El atacante solo necesita estar en el mismo dominio de broadcast y puede hacerse pasar por tu servidor legítimo, interceptando todo el tráfico.

Pero más allá del impacto técnico, esto me hace reflexionar sobre cómo vemos la seguridad en general. Muchas veces en la industria se vende la idea de que ciertos sistemas son «imposibles de hackear» o que «el código fue auditado por expertos». OpenBSD es probablemente el mejor ejemplo de auditoría rigurosa, y aún así tenía una línea de código mal escrita por casi tres décadas.

La moraleja es clara: la seguridad no es un estado, es un proceso. Y necesita que alguien revise el código viejo, no solo el nuevo. A veces los bugs más peligrosos son los que llevan años durmiendo ahí, esperando que alguien finalmente los despierte.

El fix fue simple: agregar una verificación de largo exacto antes del bcmp(), igual que tenía CHAP. Una línea de código que estuvo 27 años faltando. A veces la pega de seguridad es eso: encontrar la línea que faltó.

Fuente de inspiración: A 27-Year-Old Authentication Bypass in OpenBSD’s PPP Stack

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *