Mitiga las vulnerabilidades de recorrido de rutas en Java con Snyk Code
6 de marzo de 2023
0 minutos de lecturaEl recorrido de rutas es un tipo de vulnerabilidad de seguridad que puede ocurrir cuando una aplicación o servicio web permite que un atacante acceda a archivos o directorios del servidor que están fuera de la estructura de directorios prevista. Esto puede dar lugar a la lectura o modificación no autorizada de datos confidenciales. En el contexto de la carga de archivos, puede producirse una vulnerabilidad de recorrido de rutas cuando una aplicación no valida correctamente la ruta especificada por el usuario, lo que puede permitir que el atacante cargue un archivo malicioso cuyo nombre le dé acceso a archivos restringidos del servidor.
Prevenir el recorrido de rutas al cargar archivos es fundamental para la seguridad de las aplicaciones Java, ya que ayuda a proteger los datos confidenciales y evita el acceso no autorizado a archivos y directorios restringidos. En esta publicación del blog, analizaremos con más detalle el recorrido de rutas en la carga de archivos y te mostraremos cómo prevenir esta vulnerabilidad en aplicaciones Java con Snyk Code.
Tanto si eres desarrollador como si simplemente te interesa aprender más sobre seguridad en Java, esta publicación te brindará información y conocimientos para ayudarte a mantener seguras tus aplicaciones Java.
Cómo funciona el recorrido de rutas al cargar archivos
Imagina una aplicación que permite a los usuarios cargar fotos de perfil. La aplicación las almacena en un directorio del servidor, como /images/profiles/. Si no valida correctamente el nombre de archivo especificado por el usuario, un atacante podría cargar un archivo malicioso con un nombre como ../../etc/passwd. Esto le permitiría acceder a archivos confidenciales del sistema que están fuera de la estructura de directorios prevista.
Veamos el siguiente ejemplo de una aplicación Spring Boot que usa Thymeleaf.
Los formularios web son una forma muy común de cargar imágenes. Al cargar un archivo, usamos originalFilename del MultipartFile recibido. Si interceptamos e inspeccionamos la solicitud HTTP POST, veremos que filename es solo metadato en esta solicitud HTTP, como se muestra en la línea 24.

¡Con las herramientas adecuadas, es fácil cambiar el nombre del archivo por el que queramos! Si lo cambiamos a ../../../../../../../etc/passwd, nuestro código cargará el archivo en images/profiles/../../../../../../../etc/passwd. La ruta llegará hasta el directorio raíz y el archivo sobrescribirá /etc/passwd.
Cómo detecta Snyk Code el recorrido de rutas.
Snyk Code es una herramienta SAST en tiempo real que ayuda a los desarrolladores de Java a identificar vulnerabilidades en sus aplicaciones, incluido el recorrido de rutas al cargar archivos. La herramienta analiza tu código mediante un modelo avanzado de aprendizaje automático e identifica posibles riesgos de seguridad.
En lo que respecta al recorrido de rutas, Snyk Code puede ayudarte a identificar partes de tu código que usan rutas de archivo especificadas por el usuario sin validarlas correctamente. Por ejemplo, cuando conecté mi repositorio de GitHub a Snyk, Snyk Code detectó el problema de recorrido de rutas en la interfaz web.

Luego, usé el complemento de Snyk para IntelliJ IDEA con Snyk Code habilitado. El análisis en mi equipo durante el desarrollo ya detectó el problema de recorrido de rutas en la carga de archivos. Además, también me sugirió algunas medidas posibles para mitigar el problema.

Al usar Snyk Code, puedes identificar y corregir de forma proactiva estas vulnerabilidades de recorrido de rutas antes de que se exploten, lo que ayuda a garantizar la seguridad de tu aplicación y de los datos que maneja.
En resumen, Snyk Code ayuda a los desarrolladores de Java a identificar vulnerabilidades de recorrido de rutas al cargar archivos mediante el análisis de su código y la detección de áreas donde no se implementó una validación adecuada. Esto puede ayudar a garantizar la seguridad de tu aplicación y protegerla frente a posibles ataques.
Cómo mitigar el recorrido de rutas al cargar archivos
La forma más sencilla de corregir una vulnerabilidad de recorrido de rutas es evitar usar file.getOriginalFilename(). Si generas el nombre por tu cuenta, tienes control absoluto sobre la ubicación donde se almacena el archivo, ya que esta depende de los datos que proporciona el usuario.
Sin embargo, si quieres conservar el nombre original del archivo, debemos comprobar que la ubicación donde se almacena sea la correcta. Snyk Code (como se ve en el ejemplo del complemento para IDE) ya sugirió que podemos normalizar la ruta con normalize.
Modifiquemos el ejemplo anterior para comprobar que la ruta normalizada comience, al menos, con la carpeta de carga prevista. De esta forma, evitamos problemas de recorrido de rutas.
Nota del editor: 31 de marzo de 2023
Este bloque de código se actualizó.
Es fundamental prevenir las vulnerabilidades de recorrido de rutas.
Las vulnerabilidades de recorrido de rutas representan una grave amenaza para la seguridad de las aplicaciones web Java y actualmente se encuentran entre los principales problemas de seguridad que Snyk detecta en el código Java.
Los desarrolladores deben conocerlas y comprender cómo prevenirlas. Al implementar una validación adecuada y usar herramientas como Snyk Code para identificar posibles vulnerabilidades, pueden contribuir a garantizar la seguridad de sus aplicaciones y protegerlas frente a los riesgos de los ataques de recorrido de rutas. Es fundamental recordar que la seguridad es un proceso continuo. Mantenerse alerta y actuar de forma proactiva para identificar y mitigar vulnerabilidades es clave para mantener seguras tus aplicaciones Java.
Corrige las vulnerabilidades de recorrido de rutas y gana increíbles artículos promocionales
El evento de Snyk para corregir vulnerabilidades, The Big Fix, se lleva a cabo del 14 de febrero al 14 de marzo. Participa en la competencia y corrige vulnerabilidades en tus proyectos personales o en algún proyecto de código abierto que uses con frecuencia. Si acabas de descubrir una vulnerabilidad de recorrido de rutas en tu aplicación, agrega tu proyecto a The Big Fix. Corregir una sola vulnerabilidad te permitirá ganar una camiseta de edición limitada de The Big Fix 2023. Además, quienes corrijan más vulnerabilidades este año competirán por otros premios increíbles.
¿Qué esperas? Únete a The Big Fix y empieza a proteger tu aplicación hoy mismo.

Comienza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag con nuestro taller virtual 101 a pedido.



