
Руководство по обходному решению уязвимости управления привилегиями CVE-2022-41923 в плагине Grails Spring Security Core, предоставляющее исправленные определения фильтров для конфигураций Annotation, InterceptUrlMap и Requestmap.
Уязвимость CVE-2022-41923, обнаруженная в непатченном плагине Grails Spring Security Core (GSSC), может привести к некорректному управлению привилегиями. В этом репозитории описан способ обойти проблему.
Если вы используете непатченную версию плагина, настоятельно рекомендуем обновиться до исправленной версии. Если вы не можете обновиться немедленно, рекомендуем реализовать обходной путь, описанный в этом документе. Это особенно важно, если вы используете плагин GSSC версии 2.x, так как для версии 2.x патч недоступен.
Чтобы правильно настроить обходной путь, вам необходимо знать:
Версию плагина GSSC, используемую вашим приложением. Найдите номер версии в файле build.gradle.
(Для Grails 2.x — в файле BuildConfig.groovy).
Тип используемой конфигурации безопасности: значение параметра
grails.plugin.springsecurity.securityConfigType
| Значение конфигурации | Ссылка на документацию |
|---|---|
Annotation (по умолчанию) |
Примечание: Во всех инструкциях и конфигурациях ниже используется пакет demo.
Измените этот пакет в соответствии с вашим приложением и местом размещения исправленных исходных файлов.
Определите необходимый класс обходного пути в зависимости от типа конфигурации безопасности.
| Значение конфигурации | Класс обходного пути |
|---|---|
Annotation | PatchedAnnotationFilterInvocationDefinition |
InterceptUrlMap | PatchedInterceptUrlMapFilterInvocationDefinition |
Requestmap |
Скопируйте соответствующий исходный файл в ваше дерево исходных кодов src/main/groovy.
Наконец, добавьте следующую конфигурацию в файл application.groovy,
заменив PatchedAnnotationFilterInvocationDefinition на требуемый класс обходного пути.
grails.plugin.springsecurity.objectDefinitionSourceBeanClass = 'demo.PatchedAnnotationFilterInvocationDefinition'
Как и выше, определите необходимый класс обходного пути в зависимости от типа конфигурации безопасности.
Скопируйте соответствующий исходный файл в ваше дерево исходных кодов src/groovy.
Затем отредактируйте конфигурацию бинов в соответствии с типом конфигурации безопасности вашего приложения.
Если используется тип конфигурации безопасности Annotation, отредактируйте grails-app/conf/spring/resources.groovy, добавив:
import demo.PatchedAnnotationFilterInvocationDefinition
import grails.plugin.springsecurity.SpringSecurityUtils
beans = {
def conf = SpringSecurityUtils.securityConfig
objectDefinitionSource(demo.PatchedAnnotationFilterInvocationDefinition) {
application = ref('grailsApplication')
grailsUrlConverter = ref('grailsUrlConverter')
responseMimeTypesApi = ref('responseMimeTypesApi')
boolean lowercase = conf.controllerAnnotations.lowercase
if (conf.rejectIfNoRule instanceof Boolean) {
rejectIfNoRule = conf.rejectIfNoRule
}
}
// ... существующая конфигурация бинов ...
}
Если используется тип конфигурации безопасности InterceptUrlMap, отредактируйте grails-app/conf/spring/resources.groovy, добавив:
import demo.PatchedInterceptUrlMapFilterInvocationDefinition
import grails.plugin.springsecurity.SpringSecurityUtils
beans = {
def conf = SpringSecurityUtils.securityConfig
objectDefinitionSource(demo.PatchedInterceptUrlMapFilterInvocationDefinition) {
if (conf.rejectIfNoRule instanceof Boolean) {
rejectIfNoRule = conf.rejectIfNoRule
}
}
// ... существующая конфигурация бинов ...
}
Если используется тип конфигурации безопасности Requestmap, отредактируйте grails-app/conf/spring/resources.groovy, добавив:
import demo.PatchedRequestmapFilterInvocationDefinition
import grails.plugin.springsecurity.SpringSecurityUtils
beans = {
def conf = SpringSecurityUtils.securityConfig
objectDefinitionSource(demo.PatchedRequestmapFilterInvocationDefinition) {
if (conf.rejectIfNoRule instanceof Boolean) {
rejectIfNoRule = conf.rejectIfNoRule
}
}
// ... существующая конфигурация бинов ...
}
Дополнительные сведения об этой уязвимости вы найдёте в блоге Grails.
Обсуждения и вопросы можно направлять в соответствующий issue на GitHub плагина Grails Spring Security Core.
| Secured Annotations |
InterceptUrlMap | Static Map |
Requestmap | Requestmap Instances |
PatchedRequestmapFilterInvocationDefinition |