
Este repositorio contiene todo el trabajo relacionado con el desarrollo del PoC para CVE-2024-48208, y cómo una simple lectura OOB (fuera de los límites) puede resultar en escapes de jail así como en control de acceso roto.
El repositorio contiene todo el trabajo relacionado con el desarrollo del PoC sobre cómo una simple lectura OOB (fuera de límites) puede resultar en escapadas de la cárcel y en control de acceso roto.
La descripción original del CVE es la siguiente:

La PR de GitHub en el repositorio oficial detalla cómo la función domlsd() en el archivo ls.c es vulnerable a una vulnerabilidad de lectura OOB, debido a un incremento no verificado del puntero base, que puede hacer que el puntero apunte a un búfer fuera del búfer cmd, como se puede notar en las líneas 1053 y 1054.

Mientras depurábamos el búfer en GDB, notamos que la lectura OOB hacía que el usuario terminara en algo llamado replybuf.
Tras un análisis más detallado, descubrimos que replybuf es un búfer que se llena con la respuesta que el servidor ha proporcionado al cliente. El replybuf está definido en el archivo ftpd.c, como se muestra a continuación:

Así que, para resumir:
base apunte a una parte de replybuf.replybuf contiene la respuesta proporcionada al cliente.Ahora, en la PR de GitHub original, el autor del CVE no ha considerado/demostrado qué sucedería si la siguiente condición en ls.c:1055 devuelve verdadero.

Empezamos a reflexionar sobre ello, y resulta que si un atacante puede hacer que chdir(base) devuelva verdadero, entonces la función domlsd() procede a listar el archivo.
El equipo consideró los escenarios, que se han proporcionado en VMsetup.txt, sobre administradores de sistemas configurando entornos restringidos, y decidió construir un exploit que funcionaría de la siguiente manera:
El usuario restringido se conectará al servidor FTP vulnerable e iniciará sesión con sus credenciales.
nc <server-ip> <ftp-port>
USER <username>
PASS <password>
El usuario luego procederá a ingresar al modo EPSV.
EPSV
El usuario toma nota del número de puerto devuelto, ya que deberá conectarse a él para leer los resultados del listado.
El usuario ahora puede crear un archivo enlace (dependiendo del desplazamiento del búfer, que puede automatizarse fácilmente según la última respuesta recibida) que apunte al directorio del que desea listar archivos.
El usuario envía el comando malicioso (dependiendo del desplazamiento seleccionado).
MLSD -........<more than 4096 to overflow the cmd buffer>
El usuario puede entonces establecer otra conexión al número de puerto anotado anteriormente, para leer el listado.
Desarrollamos un script de exploit automatizado pure.py que realiza los mismos pasos, y se basa en otros scripts que desarrollamos en el camino para pruebas, los cuales se pueden encontrar en el directorio dev_files.
Para reproducir la vulnerabilidad, puedes seguir una guía paso a paso para la configuración de una máquina virtual en VMsetup.txt
Para crear un contenedor Docker de la instancia vulnerable, puedes consultar Dockersetup.txt