El 16 de octubre de 2026 la firma de seguridad Calif publicó un exploit que otorga acceso total al sistema en OpenBSD 7.9. El ataque combina dos fallos del núcleo: un desbordamiento de entero presente en la función shmat desde 1988 y una vulnerabilidad de uso después de liberar (use-after-free). Aunque OpenBSD cuenta con las mitigaciones KARLSMAP y SMEP la cadena de errores permite eludirlas y ejecutar código con privilegios de root.
Publicación y contexto del exploit
Calif detectó ambos defectos a principios del año y los informó a los desarrolladores de OpenBSD antes de su divulgación pública. Las correcciones se incluyeron en los erratas 018 y 026 lanzados en septiembre: el primero el 14 de septiembre abordó el desbordamiento de entero en shmat mientras que el segundo, publicado el 30 de septiembre, reparó el problema de referencia contaminada que provocaba el uso después de liberar. Ambas correcciones están disponibles para todas las arquitecturas mediante syspatch y también fueron retro-portadas a OpenBSD 7.8.
Mecanismo de la cadena de vulnerabilidades
Desbordamiento de entero en shmat
El contador shm_nattch utilizado para registrar cuántos procesos están adjuntos a una zona de memoria compartida, está declarado como short con signo de 16 bits, con un máximo de 32 767. Ese límite proviene del código original de BSD de 1988 y nunca se amplió en OpenBSD. El exploit crea 127 segmentos de memoria compartida y lanza 259 procesos hijos, forzando al contador a superar su rango y a envolverlo hasta -32 643. Este integer overflow abre la puerta a una condición de carrera que corrompe la cuenta de referencias.
Uso después de liberar y escritura fuera de límites
Al producirse la condición de carrera, el kernel libera una estructura todavía en uso, generando un use-after-free. Un segundo fallo permite una escritura fuera de los límites de una estructura de opciones de multicast (ip_moptions). Cuando el socket implicado se cierra, los contadores alterados provocan cambios en la tabla de páginas auto-referencial del kernel, convirtiendo una zona de memoria de usuario en accesible para el modo supervisor. De esta forma se elimina la protección SMAP y SMEP y el atacante sobrescribe un puntero de función en una dirección predecible del kernel, tomando control total.
OpenBSD incorporó la solución al desbordamiento de entero en el errata 018, clasificado como corrección de fiabilidad, y la solución al use-after-free en el errata 026, catalogado como parche de seguridad. Ambas actualizaciones están accesibles a través de syspatch para amd64, i386 y arm64, y requieren reinicio para que el nuevo núcleo entre en vigor. Calif sugiere, además, cuatro líneas de endurecimiento: implementación de safe-unlink en listas enlazadas del kernel, aleatorización del mapeo de tabla de páginas, randomización del asignador del kernel y la introducción de comprobaciones de límite en tiempo de compilación.
El caso ilustra cómo decisiones de diseño tomadas hace décadas pueden permanecer latentes en sistemas críticos. La combinación de un integer overflow de más de tres décadas y un use-after-free reciente muestra la necesidad de revisar continuamente el código heredado, incluso en proyectos con reputación de seguridad como OpenBSD.



