
Desbordamiento de montón pre-autenticación en Xlight SFTP server <= 3.9.4.2
Versiones de Xlight de 32 y 64 bits <= 3.9.4.2
Un atacante no autenticado con acceso a Xlight SFTP podría lograr la ejecución de código o causar una denegación de servicio.
Las cadenas enviadas a través de la red en el protocolo SFTP están precedidas por una longitud de cuatro bytes. La función que Xlight utiliza para leer estas cadenas del paquete de red tiene un desbordamiento de enteros al validar la longitud y al asignar la cantidad de memoria requerida. Al manipular la longitud de cuatro bytes de una cadena, podemos provocar un memmove grande (~4GB) desde un búfer controlado por el atacante fuera de los límites hacia el montón.
La función vulnerable se utiliza para recibir cadenas durante todo el handshake SSH, incluida la autenticación previa al recibir algoritmos admitidos, conjuntos de cifrado, y un nombre de usuario y contraseña del cliente. Podemos apuntar a cualquiera de estas cadenas con una longitud manipulada para desencadenar el exploit.
Esto es fácil de desencadenar, pero la facilidad de explotación depende de la arquitectura de bits del binario de Xlight.
En 32 bits, la copia se ejecutará más allá del final del montón, sobrescribiendo todo en el proceso, antes de causar un bloqueo. Es probable que sea posible corromper una estructura adyacente en el montón y explotar la naturaleza multiproceso de este servidor para acceder a los datos corruptos, antes de que la copia descontrolada bloquee el proceso.
En 64 bits no podemos obtener una escritura fuera de los límites, porque el argumento de tamaño de la llamada de asignación de memoria es un size_t (es decir, de 64 bits cuando se compila para 64 bits), lo que significa que no podemos desbordar este valor con la suma de dos enteros de 32 bits, y en su lugar simplemente asignamos un gran búfer de ~4GB. Este bug resulta en una lectura fuera de los límites, que bloquea el proceso.