Calif, una firma de investigación en seguridad, ha publicado los detalles de una vulnerabilidad en OpenBSD que se remonta aproximadamente 37 años a las fuentes originales de BSD. Un contador de adjuntos de memoria compartida estaba definido como un short de 16 bits con signo. Bifurcar repetidamente un proceso con registros de adjuntos de memoria compartida podía hacer que el contador superara su valor máximo de 32.767, provocando que diera la vuelta a un valor negativo. Este desbordamiento de enteros podía derivar en un uso tras liberación mediante una condición de carrera. Combinado con una escritura fuera de límites independiente en el kernel, permitía la escalada de privilegios locales a root. Los problemas se corrigieron en las erratas 026 y 018.
Los investigadores describieron una ruta de explotación que logró root local en OpenBSD con KARL, SMAP y SMEP habilitados, sin usar una vulnerabilidad de divulgación de información. El método consistió en mapear 127 segmentos de memoria compartida System V, desmapearlos y bifurcar 259 procesos para hacer que el contador de adjuntos diera la vuelta. Después se usaron el grooming del heap y una condición de carrera para alinear asignaciones, corromper una estructura multicast y, finalmente, obtener ejecución de código en el kernel sobrescribiendo un puntero del kernel predecible.
La explotación se basó en una primitiva de escritura en un lugar arbitrario (write-what-where): la escritura provenía de una operación TAILQ_REMOVE, el objetivo era memoria de userland hecha accesible en modo supervisor y la ubicación era un puntero del kernel predecible. KARL de OpenBSD aleatoriza las direcciones de funciones y datos, pero los asignadores de memoria del kernel siguen siendo deterministas, lo que convirtió ciertas asignaciones tempranas del arranque en objetivos fiables.
Para reducir el riesgo de ataques similares, los autores sugieren medidas como el safe-unlinking, que verifica los invariantes de las listas doblemente enlazadas antes de realizar las escrituras de desenlazado y aborta o provoca un panic si se violan. Calif afirmó que informa regularmente de vulnerabilidades a proyectos de código abierto, a menudo con parches sugeridos.
Fuente: Hacker News · Resumido por HeadlinesBriefing