**Vulnerabilidad Crítica en OpenBSD: Un Exploit de Escalación de Privilegios Locales Revela Fallos Históricos en la Seguridad del Kernel**
La reciente divulgación de un exploit que permite la escalación de privilegios locales en OpenBSD 7.9 ha puesto en evidencia la vulnerabilidad del sistema operativo ante ataques que aprovechan fallos que datan de hace aproximadamente 37 años. Este exploit combina un desbordamiento de enteros con una falla adicional en el kernel, logrando eludir las protecciones de aleatorización de direcciones del kernel (KARL) y las medidas de hardware SMAP (Supervisor Mode Access Prevention) y SMEP (Supervisor Mode Execution Prevention). La firma de seguridad Calif, que descubrió y reportó las vulnerabilidades, ha publicado un análisis detallado y el código de prueba de concepto tras la implementación de parches en septiembre.
El desbordamiento de enteros en la función de adjunto `shmat(4)` fue corregido en la errata 018, que se distribuyó el 14 de septiembre como una mejora de fiabilidad. Por otro lado, el problema de uso después de liberar memoria que completa la cadena fue solucionado por separado en la errata 026, que se lanzó el 30 de septiembre como un arreglo de seguridad. Ambos parches están disponibles a través de `syspatch` y son aplicables a todas las arquitecturas. Es importante señalar que OpenBSD 7.8 también recibió la corrección del desbordamiento de enteros.
El desbordamiento de enteros, que sirve como punto de entrada para toda la cadena de explotación, fue clasificado como una mejora de fiabilidad y no como un arreglo de seguridad. Hasta la fecha de publicación, no se ha asignado un CVE a ninguna de las vulnerabilidades y no hay evidencia de que estas hayan sido utilizadas en ataques reales.
El contador `shm_nattch` de los segmentos de memoria compartida está definido como un entero con signo de 16 bits, con un valor máximo de 32,767, en los fuentes originales de BSD que datan de 1988. OpenBSD heredó este tipo de dato y nunca lo amplió. El exploit en cuestión mapea 127 segmentos de memoria compartida y crea 259 procesos, lo que provoca que el contador supere su valor máximo y se envuelva a −32,643. Una condición de carrera luego desencadena un uso después de liberar memoria: el contador de referencia corrupto lleva al kernel a liberar memoria que otros procesos todavía utilizan.
Además, una escritura fuera de límites sobrescribe los contadores de membresía multicast en el kernel. Cuando el socket afectado se cierra, los decrecimientos resultantes modifican las entradas de la tabla de páginas, cambiando un mapeo de memoria de usuario a accesible por el supervisor y eludiendo las protecciones SMAP y SMEP. Posteriormente, el exploit sobrescribe un puntero de función en una dirección del kernel predecible para ejecutar su propio código.
El investigador Andrew Griffiths señaló que, aunque la aleatorización del binario del kernel de OpenBSD (KARL) reconfigura tanto las direcciones de función como las de datos, los asignadores de memoria del kernel siguen siendo deterministas. Tanto el asignador de tiempo de arranque como el de mejor ajuste carecen de aleatorización de dirección base, lo que provoca que las estructuras iniciales, incluidos los punteros de función en los controladores de interfaces de red `lo0` y `enc0`, se ubiquen en las mismas direcciones en distintos reinicios en el mismo hardware. El exploit no requiere ninguna vulnerabilidad de divulgación de información.
Además de las dos erratas, Calif propone cuatro categorías de endurecimiento: la desvinculación segura para listas enlazadas en el kernel (ya utilizada por FreeBSD y NetBSD), la aleatorización del mapeo autorreferencial de la tabla de páginas, la aleatorización del asignador del kernel y la verificación de límites basada en el compilador.
Calif informó que notificó las vulnerabilidades a OpenBSD "a principios de este año". El código de prueba de concepto del exploit está disponible en GitHub.
Este incidente pone de manifiesto la importancia de una revisión continua y exhaustiva de la seguridad en sistemas operativos que, a pesar de su reputación de robustez, pueden contener fallos críticos que, al no ser abordados, pueden ser explotados por atacantes malintencionados. La comunidad de desarrolladores de OpenBSD, reconocida por su enfoque en la seguridad, ahora enfrenta el desafío de implementar soluciones efectivas que refuercen la integridad del sistema y protejan a los usuarios de potenciales amenazas.
