Анализатор обнаружил использование небезопасного способа создания временных файлов. Это может сделать приложение уязвимым к атакам через файловую систему.
Уязвимости такого типа относятся к категории рисков 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); } }
Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки некорректного использования системных процедур и интерфейсов, связанных с обеспечением информационной безопасности (шифрования, разграничения доступа и пр.). |
Данная диагностика классифицируется как: