Categoría de OWASP: MASVS-STORAGE: Almacenamiento
Descripción general
Las vulnerabilidades de salto de directorio se producen cuando un atacante puede controlar parte de la ruta que luego se pasa a las APIs del sistema de archivos sin validación. Esto puede generar operaciones de sistema de archivos no autorizadas. Por ejemplo, un atacante podría usar caracteres especiales, como ../
, para cambiar el destino del recurso de forma inesperada, mientras se desplaza fuera del directorio de destino.
Impacto
El impacto varía según la operación y el contenido del archivo, pero, en general, provoca el reemplazo de un archivo (cuando se escriben archivos), la filtración de datos (cuando se leen archivos) o los cambios de permisos (cuando se cambian los permisos del archivo o del directorio).
Mitigaciones
Canonicaliza la ruta con File.getCanonicalPath()
y compara el prefijo con el directorio esperado:
Kotlin
@Throws(IllegalArgumentException::class)
fun saferOpenFile(path: String, expectedDir: String?): File {
val f = File(path)
val canonicalPath = f.canonicalPath
require(canonicalPath.startsWith(expectedDir!!))
return f
}
Java
public File saferOpenFile (String path, String expectedDir) throws IllegalArgumentException {
File f = new File(path);
String canonicalPath = f.getCanonicalPath();
if (!canonicalPath.startsWith(expectedDir)) {
throw new IllegalArgumentException();
}
return f;
}
Una práctica recomendada adicional es usar la validación para garantizar que solo se produzcan los resultados esperados. Estos son algunos ejemplos:
- Verifica si el archivo ya existe para evitar un reemplazo accidental.
- Verifica si el archivo de destino es un destino esperado para evitar que se filtren datos o se cambien los permisos de forma incorrecta.
- Verifica si el directorio actual de la operación es el que se espera en el valor que se muestra de la ruta canónica.
- Comprueba que un sistema de permisos tenga un alcance explícito para la operación, como verificar que no ejecute servicios como raíz y asegurarse de que los permisos del directorio tengan alcance en el servicio o el comando especificados.
Recomendaciones para ti
- Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
- Salto de directorio del archivo ZIP