Researchers Demonstrate OpenBSD Root Exploit Chaining 37-Year-Old Shared-Memory Bug
The Hacker News · 16 oct, 19:48
Qué hacer: Aplica los parches errata 018 y errata 026 mediante syspatch para OpenBSD 7.9, o errata 018 para OpenBSD 7.8.

Investigadores de la empresa Calif publicaron hoy un exploit de escalada de privilegios local que consigue acceso root en OpenBSD 7.9 encadenando un desbordamiento de enteros de 37 años de antigüedad con una vulnerabilidad separada en el kernel, eludiendo KARL, SMAP y SMEP. OpenBSD ya había parcheado ambas fallos en septiembre, y el código del proof-of-concept ahora es público.
El desbordamiento de enteros en la función shmat(4) fue corregido en la errata 018 del 14 de septiembre como parche de fiabilidad, mientras que el use-after-free de conteo de referencias que completa la cadena fue arreglado en la errata 026 del 30 de septiembre como parche de seguridad. Ambos están disponibles vía syspatch para todas las arquitecturas, e incluyen OpenBSD 7.8.
El contador shm_nattch de adjunción de memoria compartida se define como un entero con signo de 16 bits (máximo 32.767) en código BSD original de 1988, que OpenBSD heredó sin ampliar. El exploit mapea 127 segmentos de memoria compartida y crea 259 procesos para desbordar el contador hasta −32.643, desencadenando un use-after-free mediante una condición de carrera. Una escritura fuera de límites sobrescribe contadores de pertenencia a multidifusión, permitiendo modificar entradas de tabla de páginas y convertir memoria de usuario en accesible por supervisor, eludiendo SMAP y SMEP. El exploit luego sobrescribe un puntero de función en una dirección kernel predecible para ejecutar código propio.
Aunque KARL reenlaza el binario del kernel para aleatorizar direcciones de función y datos, los asignadores de memoria del kernel permanecen deterministas y carecen de aleatorización de dirección base, exponiendo estructuras de arranque temprano como manejadores de interfaz de red lo0 y enc0 en direcciones predecibles entre reinicios.
Puntos clave
- Desbordamiento de enteros en shmat(4) de 1988 encadenado con use-after-free de conteo de referencias
- Errata 018 (14 de septiembre) y errata 026 (30 de septiembre) parchan ambas fallos en OpenBSD 7.9 y 7.8
- Sin CVE asignado; no hay evidencia de explotación en ataques reales
- Bypass de KARL, SMAP y SMEP mediante asignadores de kernel no aleatorios
- Código PoC disponible en GitHub tras los parches