Qualys ha identificado una vulnerabilidad crítica (CVE-2024-6387) en OpenSSH que permite la ejecución remota de código con privilegios de root sin autenticación. La vulnerabilidad, cuyo nombre en código es regreSSHion, aparece en la configuración predeterminada a partir de OpenSSH 8.5 en sistemas con la biblioteca estándar Glibc.
El ataque se demostró en un sistema Glibc de 32 bits con ASLR (aleatorización del espacio de direcciones) habilitado. Un ataque exitoso en condiciones de laboratorio requirió de 6 a 8 horas, tiempo durante el cual servidor Las conexiones se establecieron continuamente a la velocidad máxima permitida por la configuración de sshd. El ataque es más sencillo y lleva menos tiempo en sistemas sin ASLR o en distribuciones que utilizan un OpenSSH modificado que deshabilita la reasignación de ASLR para cada conexión. No se ha publicado un prototipo de exploit funcional hasta que la vulnerabilidad se haya corregido ampliamente, pero existe una descripción suficientemente detallada de la vulnerabilidad, lo que hace que la aparición de exploits de terceros sea cuestión de tiempo.
No se puede descartar la posibilidad de un ataque a sistemas de 64 bits, pero aún no está listo un exploit que funcione para dichos sistemas. Se espera que llevar a cabo un ataque a sistemas de 64 bits lleve mucho más tiempo, pero no más de una semana. OpenSSH en OpenBSD no se ve afectado por el problema, ya que este sistema ha utilizado un mecanismo de protección desde 2001 que bloquea este tipo de ataques. En otros sistemas basados en bibliotecas estándar distintas a Glibc, teóricamente es posible adaptar el método para realizar un ataque (este tema aún no ha sido estudiado en Qualys).
La vulnerabilidad se solucionó en la versión (parche) de OpenSSH 9.8 publicada hoy. Puedes seguir la publicación de actualizaciones de paquetes en distribuciones en las siguientes páginas: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, ROSA, Gentoo, ALT Linux, Arch y FreeBSD. Como solución alternativa para bloquear la vulnerabilidad, puede configurar el parámetro “LoginGraceTime=0” en sshd_config, mientras que deshabilitar el tiempo de espera hará que sea más fácil iniciar una denegación de servicio cuando se establezca una gran cantidad de conexiones que excedan los límites especificados a través del Parámetro MaxStartups.
Uno de los signos de intentos de ataque es la aparición de una gran cantidad de entradas de "Tiempo de espera antes de la autenticación" en el registro.
La vulnerabilidad es el resultado de un cambio de regresión incluido en la versión OpenSSH 8.5 que provoca una condición de carrera en el código de manejo de señales en sshd. La regresión provocó la cancelación de la protección contra la antigua vulnerabilidad CVE-2006-5051, que apareció antes de la versión 4.4 (2006) de OpenSSH y era de carácter teórico.
Durante el desarrollo de OpenSSH 8.5, por error, el bloque "#ifdef DO_LOG_SAFE_IN_SIGHAND" se eliminó de la función sigdie(), que se llama directamente desde el controlador SIGALRM.
El controlador SIGALRM se llama de forma asincrónica en sshd si el cliente no se ha autenticado dentro del límite de tiempo de espera de la conexión (LoginGraceTime, predeterminado 120 segundos). El ataque se basa en el hecho de que el controlador de señales llama a funciones que no son seguras para el procesamiento de señales asíncrono, como syslog(). La función syslog() en Glibc no está diseñada para usarse en manejadores de señales ejecutados asincrónicamente, ya que llama a las funciones malloc() y free(). La activación de la señal SIGALRM, que interrumpe la ejecución de cierto código en sshd, puede provocar una violación del estado de ejecución, y la tarea del exploit es crear condiciones para interrumpir el código deseado en el momento requerido de su ejecución. La vulnerabilidad no afecta a OpenBSD porque en lugar de syslog(), el controlador de señales SIGALRM llama a la función syslog_r(), que está especialmente diseñada para ejecución asincrónica.
Fuente: opennet.ru
