1. Path traversal
Path Traversal
Path traversal, también conocido como directory traversal. Es un conjunto de vulnerabilidades que permiten a un atacante leer de forma arbitraria archivos en el servidor. Dentro de los archivos sensibles que pueden ser objetivo son:
Código fuente de la aplicación y datos sensibles
Credenciales de los sistemas back-end
Archivos sensibles sobre el sistema operativo En algunos casos, el atacante tiene la capacidad de escribir archivos de forma arbitraria, permitiendo al atacante modificar el comportamiento habitual de la aplicación y la capacidad de ganar control total del servidor.
Causas
La principal causa es el débil filtrado en entradas y salidas, puntualmente, escaso o nulo filtro de los caracteres ".", "/" y/o "\" y sus variaciones, pues dichos caracteres son los responsables de permitir el apuntado a una ruta diferente de la esperada
Ejemplo
El árbol de archivos de este ejemplo se vería de la siguiente forma:
En este ejemplo, el sitio espera recibir el nombre de un archivo ubicado dentro de la carpeta Files, en este caso, el nombre del archivo imagen.png, si se trata de acceder a cualquier otro archivo de forma convencional, se entregará un error 404 Not found, pues cualquier otro nombre de archivo diferente de imagen.png, no existe dentro de la carpeta Files, en cambio, si la entrada que recibe el nombre de archivo no se encuentra sanitizada, con filtros que eviten los caracteres mencionados con anterioridad además de sus múltiples variaciones sobre las que se aborda más adelante, puede ser especificada una ruta que apunte a un directorio diferente a Files.
En este escenario, el sitio agrega el sufijo de la ruta absoluta que apunta al directorio Files, se vería de la siguiente forma el sufijo /Files/ en adición al nombre terminaría por señalar la ruta absoluta al archivo, en un comportamiento esperado la combinación del sufijo y nombre de archivo existente terminaría siendo
de esta manera se realiza la consulta del archivo especificado en la ruta absoluta y entregado. Al agregar los agentes maliciosos "../", podemos exigir la obtención de un archivo ubicado en una ruta diferente a la esperada, aplicada a en anterior caso donde se sigue pidiendo el archivo existente dentro de Files y agregando el sufijo especificado la ruta absoluta sobre la que se realiza la consulta del archivo se vería así:
Lo que en un inicio parece un sin sentido, pero para entenderlo hay que entender como funcionan los directorios a nivel de sistema, pues el conjunto de caracteres "../" para Linux y "..\" para Windows, indican que se quiere regresar al directorio que antecede al actual, lo que en este escenario implica que si el sujeto se encuentra ubicado dentro del directorio Files o Secrets, lo redirigiría al directorio raíz /.
Siguiendo el razonamiento previo podemos llegar a la conclusión de que la consulta a la ruta
Es equivalente a una consulta a la ruta
Entonces implica que esta consulta busca el archivo ya no dentro del directorio Files si no más bien en el directorio raíz / A pesar de ser una consulta válida, no implica que exista un archivo imagen.png dentro del directorio raíz, por lo que nos retornará un error 404 Not found.
Para evadir la errónea idea de que la consulta deformada no es válida, se sugiere hacer una consulta a un archivo del cual se tenga certeza, en mayor medida, su existencia. Para este escenario el archivo del cual se tiene certeza su existencia, según el árbol ilustrativo, es el archivo secret.txt ubicado dentro del directorio Secrets que a su vez se encuentra dentro del directorio raíz / teniendo una ruta absoluta resultante en /Secrets/secret.txt
Para acceder a este archivo se sigue el uso de "../" para deformar nuestra consulta que ahora apunta al directorio raíz, por lo que se sigue la naturaleza de una consulta simple, especificando el directorio y el nombre del archivo al que queremos acceder, en este caso sería una consulta final a la ruta:
Que culminaría con el sufijo original agregado por el sitio quedando en:
Nuevamente nos encontramos con una forma rebuscada en un primer ojo, pero recordando las propiedades de "../" podemos llegar a la conclusión que es equivalente a la ruta:
Donde finalmente nos entregará una respuesta satisfactoria, pues, el sitio corrobora la existencia del archivo.
El anterior ejemplo es solo ilustrativo y poco realista, en un escenario práctico, al no tener conciencia en un inicio de desde que ruta se realizan las consultas, se opta por agregar un gran número de "../" anidados unos a otros para garantizar que las consultas se realizaran desde un directorio raíz, y así basarse en archivos inherentes al sistema operativo para corroborar la validez en su consulta. Estos archivos pueden ser archivos de configuración propia del sistema, archivos de configuración basados en las tecnologías usadas dentro de la aplicación ó rutas explicitas y concretas descubiertas con antelación.
La consulta al archivo /etc/passwd en sistemas Linux, es muy popular para la validación de consultas, por lo que en más de una ocasión podrá ser observado en colecciones de consultas pre-construidas por uno mismo o por segundas personas, además de una variedad de técnicas para evadir los filtros que se encargan de eliminar los caracteres ".", "/", "\" y sus variaciones.
El ahora denominado payload que entra dentro del grupo de los más sencillos podría ser
References
Last updated