Категория OWASP: MASVS-STORAGE: Хранилище
Обзор
Уязвимости, связанные с обходом пути, возникают, когда злоумышленник может контролировать часть пути, которая затем передается в API файловой системы без проверки. Это может привести к несанкционированным операциям с файловой системой. Например, злоумышленник может использовать специальные символы, такие как ../ , чтобы неожиданно изменить целевой ресурс, выйдя за пределы целевого каталога.
Влияние
Последствия различаются в зависимости от операции и содержимого файла, но обычно приводят к перезаписи файла (при записи файлов), утечке данных (при чтении файлов) или изменению прав доступа (при изменении прав доступа к файлу или каталогу).
Меры по смягчению последствий
Канонизируйте путь с помощью File.getCanonicalPath() и сравните префикс с ожидаемым каталогом:
Котлин
@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;
}
Ещё одним передовым методом является использование валидации для обеспечения того, чтобы происходили только ожидаемые результаты. Примеры включают следующее:
- Проверка наличия уже существующего файла для предотвращения случайной перезаписи.
- Проверка соответствия целевого файла ожидаемым целям для предотвращения утечки данных или некорректного изменения прав доступа.
- Проверка соответствия текущего каталога операции ожидаемому значению, возвращаемому каноническим путем.
- Необходимо убедиться, что система разрешений явно ограничена областью действия операции, например, проверить, что службы не запускаются от имени root, и убедиться, что разрешения каталога ограничены областью действия указанной службы или команды.