Un contador de 16 bits que nació en 1988 acaba de dar una shell de root en OpenBSD 7.9. La firma Calif publicó un exploit que convierte esa vulnerabilidad de OpenBSD en una shell de root.
El ataque encadena un use-after-free del kernel y un out-of-bounds write. Lo más incómodo: el parche que cerraba la primera pieza salió el 14 de septiembre etiquetado como fiabilidad, no como seguridad.
El fallo vive en shm_nattch, el contador de procesos con un segmento de memoria compartida SysV adjunto. En las fuentes originales de BSD se definió como un short de 16 bits con signo, con un máximo de 32.767.
OpenBSD heredó el tipo sin ampliarlo. El writeup de Calif documenta la cadena y enlaza el código original de 1988.
Cómo se convierte un contador en root
Mapea 127 segmentos de memoria compartida y los libera. Después hace fork de 259 procesos hasta que el contador se pasa de 32.767 y cae a -32.643. Después gana una carrera con IPC_RMID que provoca un use-after-free: el kernel libera memoria que otros procesos siguen usando.
Un out-of-bounds write en ip_moptions permite escribir donde no debe. Al cerrar el socket, los decrementos modifican el mapeo autorreferente de la tabla de páginas y hacen accesible una página de usuario para el supervisor. Así saltan SMAP y SMEP y sobrescriben un puntero predecible del kernel.
El detalle completo y el PoC público están en su repositorio.
El parche que los escáneres no ven
OpenBSD ya había corregido los dos fallos antes de la publicación. El overflow de shmat quedó cerrado en el errata 018 del 14 de septiembre de 2026, con etiqueta de reliability fix. El use-after-free de SysV IPC se corrigió en el errata 026 del 30 de septiembre, este sí como security fix.
En OpenBSD 7.8 los equivalentes son el errata 054 y el 062. No se asignó ningún CVE: las herramientas que priorizan por CVE no marcan el riesgo. Si tu política solo aplica parches de seguridad, el primer eslabón del exploit sigue abierto.
El ataque requiere acceso local y no hay explotación reportada, pero el PoC es público.
Qué hacer si administras OpenBSD
En 7.9 ejecuta syspatch -l y confirma que los errata 018 y 026 estén aplicados. En 7.8 revisa 054 y 062. Si faltan, aplícalos con syspatch y reinicia: son parches de kernel. La página oficial de errata detalla el procedimiento para binarios y para compilar desde fuentes.
Mientras no puedas parchear, limita el acceso local y reduce los servicios expuestos. Sigue la página de errata: el out-of-bounds write en ip_moptions no tiene un errata propio.
La lección de un short de 1988
Calif no solo mostró el exploit: también propuso mitigaciones. Habla de safe-unlinking en listas doblemente enlazadas y de randomizar la ubicación del mapeo autorreferente de la tabla de páginas.
También propone aleatorizar la base y el orden del allocator del kernel y usar sanitizers del compilador en producción. Y cierra con una advertencia que aplica a cualquier código heredado. En la era del descubrimiento de bugs asistido por IA, los tipos de dato viejos que nadie cuestionó se encuentran más rápido.
OpenBSD sigue siendo uno de los proyectos que más audita su código, y aun así un short con signo de 1988 sobrevivió casi cuatro décadas.
La tarea concreta para quien administra Linux o BSD es revisar no solo los parches de seguridad, también los de fiabilidad que tocan el kernel. El exploit está público; tu syspatch -l es la respuesta más rápida.
Más en: Ciberseguridad



