Уязвимость Spring data JPA Checkmarx — неправильная авторизация доступа к ресурсам для аннотации @Query

В настоящее время мы работаем над веб-приложением со слоем сохраняемости, реализованным с использованием Spring data JPA, и он работает очень хорошо для нас, однако при сканировании нашего кода с помощью checkmarx он жалуется на ошибку "Неверная авторизация доступа к ресурсам" для всех входных данных. параметр в приведенном ниже фрагменте кода. Не знаю, как его решить. Насколько я понимаю, мы попробовали следующий подход, но это тоже не помогло.

  • Входной параметр белого списка с использованием аннотаций @valid и @Pattern
  • Безопасный метод с использованием аннотации @Secured("ROLE_TEST") безопасности Spring.

    @Repository
    public interface EmployeeAddressRepository extends JpaRepository<EmployeeAddress, Integer> {
    
      @Query("select empAdd from EmployeeAddress empAdd where empAdd.Employee.employeeId=?1 and (endDate) ORDER BY empAdd.lastUpdateTimeStamp DESC")
      List<EmployeeAddress> findEmployeeAddressByEmployeeId(String employeeId, LocalDate date) throws PersistenceException;
    }
    

С нетерпением жду любого указателя здесь, чтобы двигаться вперед в правильном направлении


person Gautam    schedule 09.01.2020    source источник
comment
Вы проверяете ввод в интерфейсе REST?   -  person S.Spieker    schedule 23.01.2020
comment
Да, я делаю это, о чем я также упоминал в вопросе - входной параметр белого списка с использованием действительных аннотаций и аннотаций Pattern   -  person Gautam    schedule 23.01.2020


Ответы (2)


Возможно, Checkmarx не поддерживает запись порядковых параметров, попробуйте переписать запрос так:

@Query("select empAdd from EmployeeAddress empAdd where empAdd.Employee.employeeId= :empId and (endDate) ORDER BY empAdd.lastUpdateTimeStamp DESC", employeeIdParameter)

где employeeIdParameter — входной параметр.

Надеюсь, это поможет, Амит

person Amit Finegold    schedule 16.01.2020
comment
Мне нужно увидеть вектор атаки, чтобы понять больше. Если хотите, мы можем провести короткую веб-встречу, и я постараюсь вам помочь. Вы можете написать мне здесь: [email protected] - person Amit Finegold; 20.01.2020
comment
Затем мы разместили бы резолюцию здесь для всеобщего обозрения. - person Amit Finegold; 20.01.2020
comment
Спасибо, что предложили помощь. Я поделился необходимой информацией по электронной почте. - person Gautam; 21.01.2020
comment
Я столкнулся с той же проблемой. У вас есть решение для этого? - person codersingh; 20.04.2020
comment
@Amit Finegold, не могли бы вы поделиться своим мнением по этому поводу? - person Gautam; 30.04.2020
comment
Привет @Gautam, когда Checkmarx помечает код как неправильная авторизация доступа к ресурсу, это означает, что код обращается к ресурсу без проверки авторизации пользователя. Checkmarx идентифицирует проверки как утверждения. Если ваша система выполняет контроль доступа до того, как будет выполнен этот выбор, вы должны показать это своей группе безопасности и попросить пометить результат как ложноположительный. В противном случае вы можете добавить проверку авторизации следующим образом: if(canReadEmpData(user)){ @Query(select empAdd from..} и сканирование Checkmarx удалит это предупреждение. Надеюсь, это поможет :) - person Amit Finegold; 03.05.2020
comment
@AmitFinegold - Большое спасибо за вашу помощь. - person Gautam; 04.05.2020
comment
@AmitFinegold - Добро пожаловать в Stackoverflow! Вы первый ответ :) - person Gautam; 04.05.2020

В комментариях к одному из других ответов кто-то дал ответ. По сути, Checkmarx не может определить, проверяете ли вы, есть ли у пользователя/службы разрешение на выполнение этой команды.

Безопасная реализация будет выглядеть так:

if(userCanPerformAction(employeeId)){
   repository.findEmployeeAddressByEmployeeId(employeeId, date)
}

Недостаточно ума, чтобы знать, действительно ли ваш код перед вызовом репозитория выполнил необходимые проверки. Итак, что вам нужно сделать, так это убедиться, что вы выполняете правильные проверки перед выполнением findEmployeeAddressByEmployeeId. Если да, то вы будете следовать процессу своей организации, чтобы пометить что-то как ложное срабатывание.

person Cory    schedule 16.07.2020