🛡 VULNERABILIDADES 🛡

Investigadores demuestran cadena de explotación de raíz en OpenBSD aprovechando un bug de memoria compartida de 37 años.

🛡CyberObservatorio
Investigadores demuestran cadena de explotación de raíz en OpenBSD aprovechando un bug de memoria compartida de 37 años.
Idioma

Investigadores demuestran cadena de explotación de raíz en OpenBSD aprovechando un bug de memoria compartida de 37 años.

Fuente: The Hacker News

**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.

Researchers Demonstrate OpenBSD Root Exploit Chaining 37-Year-Old Shared-Memory Bug

Source: The Hacker News

A local privilege escalation exploit published today gains root on OpenBSD 7.9 by chaining a roughly 37-year-old integer overflow with a separate kernel flaw, bypassing OpenBSD's KARL kernel-address randomization and its SMAP and SMEP hardware protections. Security firm Calif, which found and reported the flaws, published adetailed writeupand full proof-of-concept code after OpenBSD shipped patches for both issues in September. The integer overflow in the shmat(4) attach function was fixed inerrata 018, shipped September 14 as a reliability fix. The reference-counting use-after-free that completes the chain was fixed separately in errata 026, shipped September 30 as a security fix. Both are available throughsyspatchand cover all architectures. OpenBSD 7.8 also received the integer-overflow fix. The integer overflow, the entry point for the full chain, is classified as a reliability fix, not a security fix. No CVE has been assigned for either flaw as of publication. There is no evidence that the vulnerabilities have been used in attacks. The shared-memory attachment countershm_nattchis defined as a signed 16-bitshortwith a maximum value of 32,767 inoriginal BSD sourcesdating to 1988. OpenBSD inherited the type and never widened it. The exploit maps 127 shared-memory segments and forks 259 processes, pushing the counter past its maximum and wrapping it to −32,643. A race condition then triggers a use-after-free: the corrupted reference count causes the kernel to free memory that other processes still use. A separate out-of-bounds write overwrites multicast-membership counters in the kernel. When the affected socket closes, the resulting decrements modify page-table entries, switching a user-memory mapping to supervisor-accessible and bypassing SMAP and SMEP. The exploit then overwrites a function pointer at a predictable kernel address to run its own code. "While OpenBSD's KARL relinks the kernel binary to randomize both function and data addresses, the kernel's memory allocators remain deterministic," researcher Andrew Griffiths wrote. Both the boot-time and best-fit allocators lack base-address randomization, so early-boot structures, including function pointers in the lo0 and enc0 network-interface handlers, land at the same addresses across reboots on the same hardware. The exploit needs no information-disclosure vulnerability. Beyond the two errata, Calif proposes four categories of hardening: safe-unlinking for kernel linked lists (already used by FreeBSD and NetBSD), randomization of the page-table self-referential mapping, kernel-allocator randomization, and compiler-based bounds checking. Calif said it reported the flaws to OpenBSD "earlier this year." Theproof-of-concept exploit codeis available on GitHub.

Investigadores demuestran cadena de explotación de raíz en OpenBSD aprovechando un bug de memoria compartida de 37 años. | Ciberseguridad - NarcoObservatorio