Категория 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
}
Ява
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, и обеспечение того, что разрешения каталога ограничены указанной службой или командой.
Рекомендуется для вас
- Примечание. Текст ссылки отображается, когда JavaScript отключен.
- Обход почтового пути