Investigadores de seguridad de Calif han publicado un análisis técnico y el código proof-of-concept de un exploit local que consigue privilegios de root en OpenBSD 7.9. El ataque encadena un desbordamiento entero en la función de unión de memoria compartida (shmat) —un bug heredado de código BSD de finales de los años ochenta— con una vulnerabilidad separada de referencia y escritura fuera de límites en el kernel, lo que permite saltarse medidas como KARL, SMAP y SMEP.
Qué ocurre y por qué importa
El primer eslabón es un desbordamiento entero en el contador de adjuntos de memoria compartida (shm_nattch). Ese contador se definió originalmente como un entero corto con signo de 16 bits, con un tope de 32.767 en fuentes BSD de 1988; OpenBSD heredó ese tipo y no lo amplió. El exploit crea muchas zonas de memoria compartida y procesos para forzar que el contador sobrepase su máximo y “envolverse” a valores negativos, lo que corrompe el recuento de referencias.
La corrupción del contador provoca una condición de carrera que desemboca en un use-after-free: el kernel libera estructuras que otros procesos siguen usando. Paralelamente, el exploit aprovecha otra falla de escritura fuera de límites que corrompe contadores de miembros multicast en el kernel. Cuando se cierra el socket afectado, las operaciones resultantes alteran entradas de la tabla de páginas y convierten un mapeo de usuario en accesible por supervisor, lo que permite eludir SMAP y SMEP (protecciones de hardware que evitan la ejecución o acceso a memoria de usuario desde modo kernel).
Con esa ventana, el exploit sobreescribe un puntero de función en una dirección de kernel predecible y logra ejecutar código con privilegios de núcleo, lo que culmina en escalada a root.
Cómo el exploit sortea la aleatorización KARL
OpenBSD usa KARL para relinkear el binario del kernel y aleatorizar direcciones tanto de código como de datos. Sin embargo, según los investigadores, los asignadores de memoria del kernel son deterministas: los allocators que se ejecutan al arranque y el “best-fit” no introducen una base aleatoria, por lo que ciertas estructuras tempranas (incluidos punteros en manejadores de interfaz de red como lo0 y enc0) quedan en direcciones repetibles en el mismo hardware. Gracias a ello, el exploit no requiere una vulnerabilidad de divulgación de información para localizar objetivos dentro del kernel.
Parcheo y mitigaciones disponibles
OpenBSD publicó dos erratas en septiembre que corrigen las vulnerabilidades encadenadas: la corrección del desbordamiento entero en shmat se incluyó como errata 018 (distribuida como parche de fiabilidad) y la corrección del use-after-free por recuento de referencias se publicó como errata 026 (clasificada como parche de seguridad). Ambas erratas están disponibles a través de syspatch y cubren todas las arquitecturas soportadas; además, la corrección del desbordamiento también llegó a OpenBSD 7.8.
No se ha asignado ningún identificador CVE público para estas fallas al momento de la publicación del análisis, y no hay evidencia conocida de explotación activa antes de los parches.
Recomendaciones prácticas para administradores
- Actualizar ya: los administradores de sistemas con OpenBSD 7.8/7.9 deben aplicar las erratas disponibles vía syspatch para asegurarse de tener ambas correcciones.
- Revisar procesos locales: dado que se trata de un exploit local que requiere crear múltiples segmentos y procesos, restringir el acceso de usuarios no confiables a sistemas multiusuario es importante.
- Seguir las propuestas de hardening: Calif sugiere medidas adicionales como safe-unlinking para listas enlazadas del kernel, randomización del mapeo autorreferencial de la tabla de páginas, randomización del allocator del kernel y comprobaciones de límites por compilador. Estas mitigaciones son complementarias a los parches y pueden reducir la superficie de ataques similares.
Qué cambia y a quién afecta
La novedad técnica es que un fallo muy antiguo en la representación del contador de adjuntos de memoria compartida sigue siendo práctico hoy en día para iniciar una cadena explotable cuando se combina con otras debilidades del kernel. Afecta a sistemas OpenBSD que no apliquen las erratas; los sitios web y servicios alojados en servidores OpenBSD con usuarios locales no confiables son los más expuestos. Aplicar los parches y endurecer el kernel son las acciones recomendadas.
Lee también:
- Cloudflare introduce evaluación continua para asegurar que los bots verificados respetan preferencias de sitios
- PwnEscape (CVE-2026-99999): kernels parcheados en pruebas para AlmaLinux tras fallo crítico de escape VM
Fuente: The Hacker News




