Directory Path Traversal
脷ltima actualizaci贸n
脷ltima actualizaci贸n
Es una vulnerabilidad de seguridad web que permite a un atacante acceder a archivos fuera del directorio ra铆z designado de un servidor web. Esto podr铆a permitir navegar por el sistema de archivos y acceda a archivos confidenciales o sensibles sin ning煤n tipo de control.
Esta vulnerabilidad suele ir muy de la mano de un ataque LFI, debido a que las explotaciones se realizan en par谩metros de la URL sobre los ficheros propios sistema.
Dentro de los riesgos de seguridad que presentan las aplicaciones web, esta t茅cnica se encuentra en primera posici贸n listada como dentro del informe de 2021, que facilit贸 el proyecto abierto de seguridad de aplicaciones web y categorizada dentro del sistema de debilidades y vulnerabilidades de software como .
Por ejemplo, si una aplicaci贸n web permite a los usuarios ver archivos mediante una URL como la siguiente:
Un atacante podr铆a intentar acceder a archivos fuera del directorio ra铆z utilizando rutas relativas como:
En este apartado veremos una peque帽a demostraci贸n de una explotaci贸n LFI. En este caso hemos montado un peque帽o laboratorio en un docker.
Crearemos un fichero PHP con el siguiente c贸digo d贸nde se espera lo siguiente:
Entrada del usuario no validada: El script PHP toma el valor de $_GET['file']
sin realizar ninguna validaci贸n o sanitizaci贸n. Esto significa que cualquier usuario puede proporcionar cualquier ruta de archivo a trav茅s de la URL.
Inclusi贸n de archivo sin verificaci贸n: La variable $file
se pasa directamente a la funci贸n include()
sin ning煤n tipo de verificaci贸n o validaci贸n adecuada. Esto significa que el usuario podr铆a manipular la entrada de la URL para incluir cualquier archivo del sistema de archivos al que tenga permiso de lectura.
Riesgo de Directory Path Traversal: Al no haber validaci贸n, un atacante podr铆a usar una ruta relativa en el par谩metro file
para retroceder en el sistema de archivos y acceder a archivos sensibles fuera del directorio ra铆z del servidor web. Por ejemplo, podr铆a intentar algo como file=../../etc/passwd
para acceder al archivo /etc/passwd
.
Primero de todo si intentamos listar un archivo dada su ruta, no obtendremos ning煤n tipo resultado. Esto sucede porque se ha tomado la ruta /var/www/html como la ra铆z de la aplicaci贸n web.
Pero como hemos comentado anteriormente, al no haber una validaci贸n o sanitizaci贸n es posible retroceder dentro de la estructura de directorios del sistema y listar archivos de configuraci贸n cr铆ticos como /etc/shadow o /etc/passwd.
Para evitar ser vulnerables a Directory Path Traversal es posible implementar una serie de medidas de seguridad (tomando de partida el c贸digo PHP utilizado para la PoC).
Validaci贸n de la entrada del usuario: Antes de incluir el archivo, debes validar y sanitizar la entrada del usuario para asegurarte de que solo se permitan caracteres v谩lidos y que la ruta del archivo est茅 dentro del directorio permitido.
Utilizar rutas absolutas: En lugar de incluir la ruta del archivo proporcionada por el usuario directamente, podr铆as construir una ruta absoluta basada en un directorio ra铆z predefinido. Esto evitar谩 que los usuarios utilicen rutas relativas para retroceder en el sistema de archivos.
Limitar el acceso a directorios espec铆ficos: En lugar de permitir el acceso a cualquier archivo en el sistema de archivos, podr铆as restringir el acceso solo a ciertos directorios espec铆ficos que contengan archivos permitidos.
C贸digo PHP aplicando las correspondientes mejoras de seguridad.
Con estas mejoras, el c贸digo ser谩 m谩s seguro y mitigar谩 la vulnerabilidad de Directory Path Traversal al limitar el acceso solo a archivos dentro del directorio ra铆z permitido y filtrar cualquier intento de acceso a directorios fuera de este 谩mbito.