Cuando la carga de archivos se convierte en acceso a archivos
Un único gestor de subida inseguro puede abrir la puerta a un ataque de recorrido de ruta completo y a una vulnerabilidad en la subida de archivos. Cuando los desarrolladores concatenan los nombres de archivo directamente con las rutas de subida, Los atacantes pueden enviar nombres de archivo maliciosos. como ../../etc/contraseña para escapar de directorios y acceder a archivos confidenciales. Este tipo de recorrido de rutas convierte una simple API de carga en una poderosa vulnerabilidad de acceso a archivos, especialmente cuando la aplicación se ejecuta con permisos elevados.
⚠️Ejemplo inseguro, solo con fines educativos. No utilizar en producción.
// Vulnerable upload handler, file upload vulnerability
[HttpPost("/upload")]
public async Task<IActionResult> Upload(IFormFile file)
{
var path = Path.Combine("uploads/", file.FileName); // No validation
using var stream = new FileStream(path, FileMode.Create);
await file.CopyToAsync(stream);
return Ok("File uploaded!");
}
Un atacante puede subir un archivo llamado ../../web.config Sobrescribir o leer archivos restringidos, un ataque clásico de recorrido de rutas.
Versión segura:
// Safe upload with validation and canonicalization
[HttpPost("/upload")]
public async Task<IActionResult> Upload(IFormFile file)
{
var fileName = Path.GetFileName(file.FileName); // strip directories
var targetDir = Path.GetFullPath("uploads/");
var safePath = Path.Combine(targetDir, fileName);
if (!safePath.StartsWith(targetDir))
return BadRequest("Invalid file path");
using var stream = new FileStream(safePath, FileMode.Create);
await file.CopyToAsync(stream);
return Ok("File securely uploaded!");
}
Nota educativa: Siempre canonicaliza las rutas con Ruta.ObtenerRutaCompleta() y comprueba que el resultado permanezca dentro de tu directorio de subida. Nunca confíes en un archivo.NombreDeArchivo .
Errores de los desarrolladores que permiten el recorrido de rutas
La mayoría de las vulnerabilidades de carga de archivos que permiten el recorrido de directorios se deben a código escrito apresuradamente y a la falta de validación. Algunos errores comunes de los desarrolladores son:
- Concatenar la entrada del usuario directamente en las rutas del sistema de archivos
- Confiando Content-Type o validación de extensión sola
- Omitir la normalización de rutas antes de guardar
Reutilización de carpetas temporales en diferentes solicitudes o microservicios
⚠️Ejemplo inseguro, solo con fines educativos. No utilizar en producción.
# Flask example vulnerable to path traversal attack
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
file.save('uploads/' + file.filename)
return 'Uploaded'
Los atacantes pueden eludir esta simple concatenación para recorrer directorios (../../app.py) y escribir o sobrescribir archivos arbitrarios. Versión segura:
# Safe file upload validation
from werkzeug.utils import secure_filename
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
name = secure_filename(file.filename)
path = os.path.join('uploads', name)
file.save(path)
return 'Securely uploaded'
Nota educativa: Utiliza las funciones auxiliares proporcionadas por el framework, como nombre_de_archivo_seguro y aplicar el uso de extensiones permitidas. Nunca concatenar manualmente la entrada en las rutas de los archivos.
Explotación en la realidad Pipelines y microservicios
Los ataques de recorrido de rutas no solo ocurren en puntos de conexión públicos. A menudo aparecen dentro de CI/CD sistemas, repositorios de artefactos o microservicios que gestionan los archivos cargados. Por ejemplo, una vulnerabilidad en la carga de archivos en un administrador de artefactos de compilación puede permitir que un atacante sobrescriba los scripts de compilación o Inyectar archivos maliciosos en ejecutores compartidos.
⚠️Ejemplo inseguro, solo con fines educativos. No utilizar en producción.
# Never expose real tokens, credentials, or internal URLs in pipelines
- name: Store build artifact
run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME
If $ NOMBRE DE ARCHIVO no está validado, es un producto elaborado ../../../etc/contraseña El valor puede sobrescribir archivos críticos del sistema durante la implementación, un ataque de recorrido de rutas del mundo real. Versión segura:
# Safer artifact storage guardrail
- name: Store build artifact securely
run: |
SAFE_NAME=$(basename "$FILENAME")
cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME"
Nota educativa: In pipelines, sanitiza todas las variables de ruta dinámicas. Limita las operaciones de escritura a directorios controlados para evitar fugas del sistema de archivos durante compilaciones o implementaciones.
Prevención del recorrido de rutas en la lógica de carga
La mitigación de la vulnerabilidad de recorrido de directorios comienza con una validación y aislamiento de entrada rigurosos. Trate los nombres de archivo y las rutas como entradas no confiables desde el principio, especialmente al procesar archivos cargados.
BUENAS PRÁCTICAS
- Normalizar y canonicalizar revise todas las rutas antes de utilizarlas.
- Restringir las cargas a un directorio dedicado fuera de la raíz web.
- Aplicar listas blancas para extensiones de archivo y tipos MIME.
- Nunca reutilice las carpetas temporales. entre sesiones o usuarios.
- Utilice almacenamiento en contenedores para los archivos subidos cuando sea posible.
Mini lista de verificación preventiva
- Valida cada nombre de archivo con Ruta.ObtenerNombreArchivo() o equivalente.
- Resuelva las rutas completas y verifique los límites de los directorios.
- Aplicar listas blancas de extensiones y MIME.
- Utilice carpetas de carga separadas por usuario o sesión.
- Incluir escaneo y validación de carga en CI/CD pruebas.
Nota educativa: Cada gestor de subida de archivos es un posible vector de ataque de recorrido de directorios. Implemente una defensa en profundidad validando, aislando y analizando todo el código de gestión de archivos.
Cómo Xygeni detecta y bloquea flujos de carga inseguros
xygeni Code Security escanea bases de código y pipelines para detectar patrones de recorrido de rutas antes de que lleguen a producción. Detecta concatenaciones de rutas inseguras, falta de normalización y operaciones de archivos peligrosas tanto en el código como en el archivo. CI/CD scripts.
Fragmento funcional, con barandilla de control:
# Secure enforcement with Xygeni
- name: Enforce secure upload and path handling
run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk
Nota educativa: La integración de xygeni en su pipeline Garantiza que las vulnerabilidades de carga de archivos y los ataques de recorrido de directorios se detecten automáticamente durante la validación de la compilación.
Cerrando la brecha: Previniendo su próximo ataque de recorrido de caminos
Un único fallo de recorrido de directorios en un punto final de carga de archivos puede dar a los atacantes acceso al sistema de archivos de su servidor. Revise los controladores de carga para detectar concatenaciones inseguras, normalice todas las rutas y nunca confíe en los nombres de archivo controlados por el usuario. Agregar la extensión de herramientas de escaneo de vulnerabilidades como Xygeni Code Security para usted DevSecOps pipeline para detectar ataques de recorrido de directorios y vulnerabilidades de carga de archivos antes de su lanzamiento. En materia de seguridad, ¡cada archivo guardado debe tratarse como código ejecutado!





