Path Traversal: qué es y cómo prevenirlo

Autor: Publicado

En resumen: Path Traversal es una vulnerabilidad de seguridad que permite acceder, a través de una aplicación, a archivos situados fuera del directorio previsto para atender una solicitud. Suele asociarse a la lectura de archivos ajenos, pero, si afecta a funciones de escritura o eliminación, también puede permitir modificarlos o borrarlos. El problema surge cuando la aplicación utiliza datos del usuario como parte de la ruta de un archivo sin comprobar adecuadamente adónde conduce esa ruta.

En qué consiste salir del directorio permitido

Una ruta es la dirección de un archivo dentro del sistema de archivos, por ejemplo, /srv/aplicacion/documentos/instrucciones.pdf. Una aplicación que ofrece documentos para su descarga debería permitir descargar únicamente archivos de la ubicación designada, no cualquier archivo disponible en el servidor.

Path Traversal, también llamado directory traversal o dot-dot-slash, consiste en traspasar ese límite. El nombre dot-dot-slash, que significa «punto, punto, barra», hace referencia a la secuencia ../: los dos puntos representan el directorio superior y la barra separa los elementos de la ruta. Utilizada de cierta manera, esta secuencia puede dirigir una operación fuera de la carpeta permitida.

Podemos compararlo con una ventanilla de entrega de documentos. El cliente debería indicar el número de un documento y el empleado entregárselo desde el archivador correspondiente. El fallo aparece cuando, en lugar de un número, el empleado acepta una instrucción como esta: «sal de este archivador, ve a la habitación de al lado y recoge el archivo indicado».

Ejemplo: descargar un documento por su nombre

Supongamos que una aplicación almacena documentos públicos en el directorio /srv/aplicacion/documentos/. El usuario selecciona un archivo y el navegador envía esta solicitud:

/descargar?archivo=instrucciones.pdf

Si el programa añade el valor del parámetro archivo a la ruta del directorio de documentos sin comprobarlo, obtendrá la ruta /srv/aplicacion/documentos/instrucciones.pdf. Con un nombre normal, todo parece correcto. El problema aparece al introducir un valor que incluye un salto al directorio superior:

/descargar?archivo=../konfiguracja.env

La ruta resultante, /srv/aplicacion/documentos/../konfiguracja.env, apunta a /srv/aplicacion/konfiguracja.env, es decir, a un archivo situado fuera del directorio de documentos. Si la aplicación puede leerlo y devuelve su contenido, se produce una filtración de datos.

Este ejemplo ilustra el mecanismo, pero no garantiza que un ataque tenga éxito. El archivo debe existir, el proceso de la aplicación debe tener acceso a él y la forma de gestionar la solicitud debe permitir utilizar la ruta indicada. Estas comprobaciones solo deben realizarse en un entorno propio o con autorización expresa para hacer pruebas.

Qué daños puede causar Path Traversal

Las consecuencias dependen, sobre todo, de la operación que realice la función vulnerable y de los permisos que tenga la aplicación en el sistema operativo.

En determinadas condiciones, sobrescribir la configuración o colocar un archivo que el servidor pueda ejecutar puede permitir tomar posteriormente el control de la aplicación. Sin embargo, Path Traversal no implica automáticamente la posibilidad de ejecutar código ni de obtener acceso completo al servidor. Su alcance está limitado, entre otros factores, por los permisos del proceso y las funciones disponibles en la aplicación.

La vulnerabilidad no afecta únicamente a las direcciones visibles en el navegador. Los datos que influyen en la ruta también pueden proceder de un formulario, de una solicitud a una API, del nombre de un archivo subido o de una entrada de un archivo comprimido que se está extrayendo.

Cómo reducir el riesgo de forma eficaz

La solución más segura es evitar que el usuario indique una ruta. En lugar de aceptar el nombre o la ubicación de un archivo, la aplicación puede recibir un identificador de documento, por ejemplo, 482, y localizar por su cuenta el archivo asociado. También debe comprobar que ese usuario tiene permiso para descargarlo: el identificador, por sí solo, no ofrece protección.

Si es necesario aceptar rutas, la protección debe incluir varios elementos:

  1. Delimitar estrictamente los datos de entrada. Si una función solo necesita el nombre del archivo, no debe aceptar una ruta completa. Los nombres y las extensiones admitidos deben limitarse a lo realmente necesario.
  2. Comprobar la ubicación final. Tras aplicar las reglas del sistema de archivos, la aplicación debe confirmar que el destino sigue dentro del directorio permitido. Para ello deben utilizarse funciones adecuadas de tratamiento de rutas, no una simple comparación del inicio de las cadenas de texto.
  3. Tener en cuenta los enlaces simbólicos. Un enlace simbólico es una referencia a otra ubicación del sistema de archivos. Un archivo que aparentemente está dentro de la carpeta permitida puede, mediante esa referencia, apuntar fuera de ella.
  4. Aplicar permisos mínimos. El proceso que sirve los documentos no debe tener acceso a datos que no necesita ni permisos de escritura donde basta con permitir la lectura.

Eliminar únicamente la secuencia ../ no ofrece una protección suficiente. Las diferencias en los separadores, la codificación y el orden de procesamiento pueden hacer que el filtro y el sistema de archivos interpreten de distinta manera un mismo valor. La comprobación debe ajustarse a la forma en que la aplicación abre realmente el archivo.

Por dónde empezar a revisar la aplicación

Revisa las funciones de descarga, subida, eliminación y extracción de archivos. Para cada una, determina si el usuario puede influir en la ruta, qué directorio está permitido y si el programa comprueba el destino final de la operación. Las pruebas deben incluir tanto intentos de salir del directorio como solicitudes normales y válidas.

Si sospechas que se ha explotado la vulnerabilidad, corregir el código puede no ser suficiente. Es necesario evaluar qué archivos estaban accesibles, revisar los registros y, si pudieron filtrarse credenciales de acceso, cambiar las contraseñas o claves correspondientes. El primer paso práctico es localizar el punto concreto en el que los datos del usuario se convierten en una ruta de archivo.

Consulta también: ¿Qué es Apache?

Lee también

Descubre cómo PHP-FPM atiende peticiones PHP, en qué se diferencia de un servidor web y cómo ajustar sus procesos al tráfico y los recursos.
Conoce BIND, el software abierto de servidor DNS: sus funciones, cómo gestiona dominios y cuándo conviene instalarlo por tu cuenta.
Descubre qué son el registro REGON de Polonia y su número, en qué se diferencian de NIP y KRS y cómo verificar los datos de una empresa.