Получение сонара критической проблемы с безопасностью Spring - PullRequest
0 голосов
/ 21 января 2020

Я использую весеннюю загрузку 2 с конфигурацией безопасности Okta Starter.My, как показано ниже.

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated().and().oauth2ResourceServer().jwt();

        // Send a 401 message to the browser (w/o this, you'll see a blank page)
        Okta.configureResourceServer401ResponseBody(http);
    }

Все работает нормально, как ожидалось, но сонар дает следующую точку безопасности на authorizeRequest (), как показано ниже

"Убедитесь, что здесь разрешено безопасное управление разрешениями

Управление разрешениями зависит от безопасности. В прошлом это приводило к следующим уязвимостям:

CVE-2018-12999 CVE-2018- 10285 CVE-2017-7455 Злоумышленники могут повредить только то, к чему у них есть доступ. Таким образом, ограничение их доступа - хороший способ предотвратить их нарушение. c, но это должно быть сделано правильно.

Это правило Флаги кода, который контролирует доступ к ресурсам и действиям. Цель состоит в том, чтобы направлять обзоры кода безопасности.

Более конкретно, это вызовет проблемы со следующим кодом Spring:

Определение реализации любого класса интерфейсы org.springframework.security.access.AccessDecisionVoter

org.springframework.security.access.AccessDecisionMana ger

org.springframework.security.access.AfterInvocationProvider

org.springframework.security.access.PermissionEvaluator

org.springframework.security.access.expression 10Osecurity *

org.springframework.security.access.expression.method.MethodSecurityExpressionHandler

org.springframework.security.core.GrantedAuthority

org.springframework.secran.Purity 1030 *

Определение любого расширяющего класса класса org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration

Любой метод, аннотированный до-пост-аннотациями: @PreAuthorize, @PreFilter, @Post или @PostFilter из пакета org.springframework.security.access.prepost.

@org.springframework.security.access.annotation.Secured

Вызывает любой из следующих методов org.springframework. security.acls.model.MutableAclService: createAcl, deleteA cl, updateAcl

org.springframework.security.config.annotation.web.builders.HttpSecurity: authorizeRequests

Создание экземпляра анонимного класса, реализующего org.springframework.security.core.GrantedAuthority или любой класс, реализующий этот интерфейс напрямую. Это также поднимает проблему с аннотациями JSR-250 @RolesAllowed, @PermitAll и @DenyAll из пакета javax.annotation.security.

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

Рекомендуемые методы безопасного кодирования Первый шаг - ограничить все важные действия для аутентифицированных пользователей.

Каждый пользователь должны иметь минимально возможные привилегии. Детализация контроля доступа должна соответствовать чувствительности каждого ресурса или действия. Чем он более чувствителен, тем меньше людей должно иметь к нему доступ.

Не основывайте управление доступом на пользовательском вводе или значении, которое могло быть подделано. Например, разработчик не должен читать разрешения пользователя из HTTP cook ie, так как он может быть изменен на стороне клиента.

Убедитесь, что доступ к каждому действию и ресурсу правильно ограничен.

Позволяет администраторам быстро удалять разрешения при необходимости. Это позволяет им сократить время, в течение которого злоумышленник может получить доступ к вашим системам в случае нарушения.

Регистрировать и отслеживать отклоненные запросы на доступ, поскольку они могут выявить атаку.

См. OW ASP Top 10 2017, категория A5 - контроль доступа Boken SANS Top 25 - пористая защита "

В качестве исправления я сделал несколько вещей, но проблема все еще есть.

Исправлено:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/api/**").access("hasAnyAuthority('CLIENT', 'ADMIN','OPERATION')").anyRequest()
                .authenticated().and().oauth2ResourceServer().jwt();

        // Send a 401 message to the browser (w/o this, you'll see a blank page)
        Okta.configureResourceServer401ResponseBody(http);
    }

Может кто-нибудь помочь с этим?

...