Обход пути

Категория 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, и убедиться, что разрешения каталога ограничены областью действия указанной службы или команды.