Ataque de Path Traversal
Un ataque de path traversal (también conocido como directory traversal o ataque dot-dot-slash) explota una validación de entrada insuficiente para acceder a archivos y directorios fuera del alcance previsto. Al manipular referencias de rutas de archivos con secuencias como ../ (directorio padre), un atacante puede leer archivos sensibles del sistema, código fuente de la aplicación, archivos de configuración que contienen credenciales, y potencialmente ejecutar código arbitrario.
Cómo Funciona Ataque de Path Traversal
El path traversal explota aplicaciones que usan entrada proporcionada por el usuario para construir rutas de archivos. Cuando la aplicación no valida ni sanitiza adecuadamente la entrada, el atacante puede navegar por la estructura de directorios usando secuencias de rutas relativas para acceder a archivos fuera de la raíz web.
Identificar un parámetro que referencia archivos
El atacante encuentra un parámetro de URL, campo de formulario o endpoint de API que referencia archivos — como ?page=about.html, ?template=header, ?file=report.pdf, o ?lang=en. Cualquier parámetro que se mapee a una ruta del sistema de archivos es un objetivo potencial.
Inyectar secuencias de traversal
El atacante reemplaza el valor esperado con secuencias de directory traversal: ../../etc/passwd en Linux o ..\..\windows\system32\config\SAM en Windows. Múltiples secuencias ../ ascienden por el árbol de directorios hacia la raíz.
Evadir filtros si existen
Si existe filtrado básico, el atacante usa técnicas de evasión: codificación URL (%2e%2e%2f), codificación doble (%252e%252e%252f), bytes nulos (..%00.html), Unicode (..%c0%af), o separadores de ruta mixtos (..\../) para evadir la coincidencia de patrones.
Leer o ejecutar archivos objetivo
El servidor devuelve el contenido del archivo objetivo. Los archivos comúnmente atacados incluyen /etc/passwd, /etc/shadow, application.properties, .env, wp-config.php y web.config — revelando credenciales, claves API y configuración del sistema.
Ejemplos Reales
Path traversal en Fortinet FortiOS (CVE-2018-13379)
Una vulnerabilidad de path traversal en la VPN SSL de Fortinet permitía a atacantes no autenticados leer archivos del sistema incluyendo tokens de sesión. Más de 87,000 dispositivos estaban expuestos y las credenciales filtradas fueron publicadas en foros de hackers, afectando a redes gubernamentales y empresariales en todo el mundo.
Path traversal en Apache HTTP Server (CVE-2021-41773)
Un path traversal crítico en Apache 2.4.49 permitía a los atacantes acceder a archivos fuera de la raíz del documento usando secuencias dot-dot codificadas en URL. Si mod_cgi estaba habilitado, también permitía la ejecución remota de código. La falla fue explotada activamente a los pocos días de su divulgación.
Brecha de transferencia de archivos Accellion FTA
El path traversal combinado con otras vulnerabilidades en Accellion FTA permitió a los atacantes robar archivos de organizaciones incluyendo Morgan Stanley, Kroger, Shell y múltiples universidades, afectando a millones de personas.
Impacto y Evaluación de Riesgo
El path traversal puede exponer archivos sensibles del sistema, configuración de la aplicación con credenciales de base de datos, claves API y secretos de cifrado. En casos graves, conduce a la ejecución remota de código al leer código fuente de la aplicación para encontrar más vulnerabilidades, o al escribir en directorios ejecutables. El ataque se clasifica como Crítico porque viola directamente la frontera del sistema de archivos del servidor — la suposición de seguridad fundamental de las aplicaciones web.
Cómo Detectar Ataque de Path Traversal
Monitorear URLs de solicitudes y parámetros en busca de secuencias ../, variantes codificadas en URL (%2e%2e) y bytes nulos. Vigilar solicitudes dirigidas a archivos sensibles conocidos (/etc/passwd, wp-config.php, .env). Analizar logs del WAF en busca de intentos repetidos de traversal desde la misma IP. Alertar sobre patrones inusuales de acceso a archivos en los logs de la aplicación. Implementar monitoreo de integridad de archivos en archivos críticos del sistema.
Cómo Prevenir Ataque de Path Traversal
Nunca usar la entrada del usuario directamente en operaciones de rutas de archivos. Mantener una lista de permitidos de archivos autorizados en lugar de intentar bloquear patrones maliciosos. Usar un chroot jail o contenedorización para aislar la vista del sistema de archivos de la aplicación. Eliminar o rechazar cualquier entrada que contenga separadores de ruta (/ y \) y secuencias de traversal. Resolver la ruta canónica (absoluta) y verificar que se encuentre dentro del directorio base esperado. Ejecutar la aplicación con permisos mínimos del sistema de archivos — el usuario del servidor web solo debería acceder a lo estrictamente necesario.
Ejemplos de Código
# VULNERABLE: user input used directly in file path
@app.route('/view')
def view_file():
filename = request.args.get('file')
filepath = f'/var/www/uploads/{filename}'
return send_file(filepath)
# Attacker request:
# /view?file=../../../../etc/passwd
import os
BASE_DIR = '/var/www/uploads'
@app.route('/view')
def view_file():
filename = request.args.get('file', '')
# Reject any path separators in the filename
if os.sep in filename or '/' in filename:
abort(400, 'Invalid filename')
# Resolve the canonical path and verify it's within BASE_DIR
filepath = os.path.realpath(os.path.join(BASE_DIR, filename))
if not filepath.startswith(os.path.realpath(BASE_DIR)):
abort(403, 'Access denied')
if not os.path.isfile(filepath):
abort(404)
return send_file(filepath)
PowerWAF bloquea automáticamente Ataque de Path Traversal antes de que llegue a tu servidor.
Implementa en minutos. Sin cambios de código. Plan gratuito disponible.
Los cupos del plan gratuito son limitados