Неправильная авторизация контроля доступа - Checkmarx - Операция чтения/записи файла

Я использую инструмент безопасности Checkmarx для сканирования своего кода. Я получаю:

Неправильная авторизация контроля доступа

по методу чтения/записи при записи данных в выходной поток из файла.

private ByteArrayOutputStream createToByteArray(String fileName) throws IOException {
        byte[] buf = new byte[1024];
        try (InputStream is = Files.newInputStream(Paths.get(fileName))) {
            int len = is.read(buf);
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            while (len != -1) {
                os.write(buf, 0, len);
                len = is.read(buf);
            }
            return os;
        }
    }

person Rishabh    schedule 17.05.2020    source источник
comment
Отвечает ли это на ваш вопрос? Checkmarx Неверная авторизация доступа к ресурсам   -  person baruchiro    schedule 17.05.2020


Ответы (1)


Вы ожидаете, что пользователь сможет прочитать файл из файловой системы за path и преобразовать его в ByteStream. Отлично.

Но что, если пользователь укажет вам абсолютный путь к файлу? Или относительный (../../.ssh/id_rsa, например)?

Независимо от того, кто отправляет запрос, права доступа запроса на самом деле являются правами доступа сервера (поскольку этот код, конечно же, выполняется на сервере).

Поэтому вам необходимо проверить права доступа пользователя, чтобы избежать неправильной авторизации управления доступом.

Пример из этого ответа:

if (user.equals("admin")){
   try (InputStream is = Files.newInputStream(Paths.get(fileName))) {
      ...
   }
}

Кроме того, я предлагаю удалить любой относительный путь из входного пути filename.

person baruchiro    schedule 17.05.2020
comment
пользователь уже прошел проверку подлинности и авторизации Spring Security на глобальном уровне. Я предполагаю, что это плохой дизайн, чтобы проверять его каждый раз, когда мы выполняем операцию чтения/записи. - person Rishabh; 20.05.2020