Path Traversal: Acceso no Autorizado a Archivos y Directorios

Publicado el por Admin

Path Traversal

La vulnerabilidad **Path Traversal**, también conocida como "Directory Traversal" o "../ attack", permite a un atacante acceder a archivos y directorios almacenados fuera del directorio raíz de la aplicación web. Al manipular las rutas de archivo en los parámetros de entrada, un atacante puede leer, y en algunos casos escribir o ejecutar, archivos sensibles del servidor o de otras partes del sistema de archivos, lo que puede llevar a una divulgación de información crítica o incluso a la ejecución remota de código.


¿Cómo Funciona Path Traversal?

Esta vulnerabilidad surge cuando una aplicación web utiliza la entrada del usuario para construir rutas de archivo sin una validación o saneamiento adecuado. El atacante inserta secuencias de caracteres como `../` (punto-punto-barra) en la entrada para navegar a directorios padre y así acceder a ubicaciones fuera del ámbito previsto de la aplicación.

Por ejemplo, si una aplicación utiliza un parámetro para cargar una imagen:

http://ejemplo.com/mostrar_imagen?archivo=banner.jpg

Internamente, el servidor podría construir una ruta como: `/var/www/html/imagenes/banner.jpg`.

Un atacante podría modificar la URL para intentar acceder a un archivo sensible del sistema:

http://ejemplo.com/mostrar_imagen?archivo=../etc/passwd

Si la aplicación es vulnerable, podría construir la ruta: `/var/www/html/imagenes/../etc/passwd`, lo que se resuelve a `/var/www/html/etc/passwd` y luego a `/etc/passwd`, permitiendo al atacante leer el archivo de contraseñas de Linux.


Variaciones del Ataque Path Traversal

Los atacantes pueden emplear varias técnicas para evadir los filtros básicos:


Impacto de Path Traversal

Las consecuencias de una vulnerabilidad Path Traversal pueden ser significativas:


Prevención de Path Traversal

La clave para prevenir Path Traversal es nunca confiar en la entrada del usuario para construir rutas de archivo y aplicar una validación estricta y lógica de saneamiento:

  1. **Validación Robusta de Entrada:**

    No permitir caracteres como `.` `..` o `/` en los nombres de archivo proporcionados por el usuario. La validación debe ser por "lista blanca" (whitelist), permitiendo solo los caracteres conocidos y seguros, como caracteres alfanuméricos y guiones.

  2. **Normalización de Rutas antes de la Validación:**

    Antes de cualquier validación, normalizar la ruta de entrada para resolver todas las secuencias `../` y `.` y cualquier codificación URL. Esto asegura que la validación se realice sobre la ruta final real y no sobre una forma ofuscada.

    // Pseudocódigo:
    String sanitizedPath = normalize(userInputPath);
    if (sanitizedPath.contains("../")) {
        // DENIEGAR
    }
  3. **Restricción del Alcance de Archivos:**

    Si la aplicación debe servir archivos basados en la entrada del usuario, asegúrate de que el usuario solo pueda seleccionar entre una lista predefinida de archivos permitidos o que el archivo se sirva desde un directorio seguro y fijo, sin permitir la construcción dinámica de rutas.

    // Pseudocódigo:
    String baseDir = "/var/www/html/archivos_publicos/";
    String requestedFile = validate_filename(userInputFilename); // solo el nombre, no la ruta
    String fullPath = baseDir + requestedFile;
    // Asegurarse de que fullPath está dentro de baseDir antes de abrirlo
    
  4. **Uso de Entornos con Privilegios Mínimos (Chroot Jails):**

    Configurar el servidor web o el proceso de la aplicación para que se ejecute dentro de un entorno chroot (jaula), lo que restringe su acceso al sistema de archivos a un subdirectorio específico y evita que pueda navegar más allá de él.

  5. **Control de Acceso (Permisos de Archivo):**

    Asegurarse de que incluso si un atacante logra acceder a un archivo fuera del directorio web, los permisos del sistema operativo (Linux/Unix) o del sistema de archivos (NTFS en Windows) impidan su lectura o escritura.


Consideraciones Éticas

Este artículo tiene fines educativos y de concienciación sobre las vulnerabilidades de seguridad web. La manipulación de rutas de archivo y el intento de acceder a recursos sin autorización en sistemas ajenos es ilegal y puede tener graves consecuencias legales. Utiliza estos conocimientos de manera responsable y ética, siempre en entornos controlados y con el permiso explícito del propietario del sistema.

¿Has encontrado alguna vez una vulnerabilidad de Path Traversal en tus proyectos o durante un pentesting? ¡Comparte tu experiencia y consejos de prevención!

La implementación de defensas contra Path Traversal requiere un diseño cuidadoso y pruebas exhaustivas, especialmente en aplicaciones que manejan dinámicamente archivos o rutas.