V5329. OWASP. Using non-atomic file creation is not recommended because an attacker might intercept file ownership.
Анализатор обнаружил использование небезопасного способа создания временных файлов. Это может сделать приложение уязвимым к атакам через файловую систему.
Уязвимости такого типа относятся к категории рисков OWASP Top 10 Application Security Risks 2021:
Вызов небезопасной функции createTempFile
из класса java.io.File
считается заведомо небезопасным, если выполняется совместно с вызовом методов mkdir
или mkdirs
:
public File createTemporaryDirectory() {
File dir = new File(baseDirFactory.create(),
CollectionUtils.join("/", path));
GFileUtils.mkdirs(dir);
try {
File tmpDir = File.createTempFile("gradle",
"projectDir",
dir);
tmpDir.delete();
tmpDir.mkdir();
return tmpDir;
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
Создание временных файлов неатомарным способом может привести к состоянию гонки в поведении приложения. Из-за этого третья сторона может создать этот файл между тем, когда приложение выбирает его имя, и тем, когда оно его создает. В такой ситуации приложение будет использовать файл, который по-настоящему не контролирует.
Атакующий может получить доступ и контроль над временным файлом уязвимого приложения, а также поменять его таким образом, чтобы изменить логику работы приложения.
Безопасной в таком случае является реализация создания временного файла методом createTempDirectory
из класса java.nio.file.Files
:
public File createTemporaryDirectory() {
try {
File dir = new File(baseDirFactory.create(),
CollectionUtils.join("/", path));
GFileUtils.mkdirs(dir);
Path tempDir = Files.createTempDirectory(dir.toPath(),
"gradle");
return tempDir.toFile();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
Данная диагностика классифицируется как: