
Guia de contorno para a vulnerabilidade de gerenciamento de privilégios CVE-2022-41923 no plugin Grails Spring Security Core, fornecendo definições de filtro corrigidas para configurações Annotation, InterceptUrlMap e Requestmap.
A vulnerabilidade CVE-2022-41923 encontrada no plugin Grails Spring Security Core (GSSC) não corrigido pode resultar em gerenciamento inadequado de privilégios. Este repositório descreve como contornar o problema.
Se você estiver usando uma versão não corrigida do plugin, recomendamos fortemente que você atualize para uma versão corrigida. Se não puder atualizar imediatamente, incentivamos você a implementar a solução de contorno descrita neste documento. Isso é especialmente importante se você estiver usando a versão 2.x do plugin GSSC, pois não há patch disponível para a versão 2.x.
Para configurar corretamente a solução de contorno, você precisa saber:
A versão do plugin GSSC que sua aplicação utiliza. Procure o número da versão no arquivo build.gradle. (Para Grails 2.x, procure no arquivo BuildConfig.groovy).
Que tipo de configuração de segurança você está usando: ou seja, o valor de configuração para grails.plugin.springsecurity.securityConfigType
| Valor de Configuração | Referência da Documentação |
|---|---|
| (padrão) |
Nota: Em todas as instruções e configurações abaixo, o pacote demo é usado. Altere este pacote de acordo com sua aplicação e o local onde você coloca os arquivos de origem corrigidos.
Determine a classe de solução de contorno necessária com base no seu tipo de configuração de segurança.
| Valor de Configuração | Classe de Solução de Contorno |
|---|---|
Annotation | PatchedAnnotationFilterInvocationDefinition |
InterceptUrlMap | PatchedInterceptUrlMapFilterInvocationDefinition |
Copie o arquivo de origem correspondente para a sua árvore de origem src/main/groovy.
Finalmente, adicione a seguinte configuração ao seu arquivo de configuração application.groovy, substituindo PatchedAnnotationFilterInvocationDefinition pela classe de solução de contorno necessária.
grails.plugin.springsecurity.objectDefinitionSourceBeanClass = 'demo.PatchedAnnotationFilterInvocationDefinition'
Como acima, determine a classe de solução de contorno necessária com base no seu tipo de configuração de segurança.
Copie o arquivo de origem correspondente para a sua árvore de origem src/groovy.
Em seguida, edite sua configuração de bean com base no tipo de configuração de segurança da sua aplicação.
Se estiver usando o tipo de configuração de segurança Annotation, edite o grails-app/conf/spring/resources.groovy para incluir:
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
}
}
// ... existing bean configuration ...
}
Se estiver usando o tipo de configuração de segurança InterceptUrlMap, edite o grails-app/conf/spring/resources.groovy para incluir:
import demo.PatchedInterceptUrlMapFilterInvocationDefinition
import grails.plugin.springsecurity.SpringSecurityUtils
beans = {
def conf = SpringSecurityUtils.securityConfig
objectDefinitionSource(demo.PatchedInterceptUrlMapFilterInvocationDefinition) {
if (conf.rejectIfNoRule instanceof Boolean) {
rejectIfNoRule = conf.rejectIfNoRule
}
}
// ... existing bean configuration ...
}
Se estiver usando o tipo de configuração de segurança Requestmap, edite o grails-app/conf/spring/resources.groovy para incluir:
import demo.PatchedRequestmapFilterInvocationDefinition
import grails.plugin.springsecurity.SpringSecurityUtils
beans = {
def conf = SpringSecurityUtils.securityConfig
objectDefinitionSource(demo.PatchedRequestmapFilterInvocationDefinition) {
if (conf.rejectIfNoRule instanceof Boolean) {
rejectIfNoRule = conf.rejectIfNoRule
}
}
// ... existing bean configuration ...
}
Para informações adicionais sobre esta vulnerabilidade, consulte a postagem do blog Grails.
Discussões e perguntas podem ser direcionadas a esta issue no GitHub do plugin Grails Spring Security Core.
Annotation| Secured Annotations |
InterceptUrlMap | Mapa Estático |
Requestmap | Instâncias de Requestmap |
RequestmapPatchedRequestmapFilterInvocationDefinition |