
Guía de solución alternativa para la vulnerabilidad de gestión de privilegios CVE-2022-41923 en el plugin Grails Spring Security Core, que proporciona definiciones de filtro parcheadas para las configuraciones Annotation, InterceptUrlMap y Requestmap.
La vulnerabilidad CVE-2022-41923 encontrada en el complemento Grails Spring Security Core (GSSC) sin parche puede dar lugar a una gestión de privilegios inadecuada. Este repositorio describe cómo solucionar el problema.
Si está utilizando una versión sin parche del complemento, le recomendamos encarecidamente que actualice a una versión parcheada. Si no puede actualizar de inmediato, le instamos a implementar la solución alternativa descrita en este documento. Esto es especialmente importante si está utilizando el complemento GSSC versión 2.x, ya que no hay ningún parche disponible para la versión 2.x.
Para configurar correctamente la solución alternativa, necesita saber:
La versión del complemento GSSC que emplea su aplicación. Busque el número de versión en su archivo build.gradle. (Para Grails 2.x, busque en el archivo BuildConfig.groovy).
Qué tipo de configuración de seguridad está utilizando: es decir, el valor de configuración para grails.plugin.springsecurity.securityConfigType
| Valor de Configuración | Referencia de Documentación |
|---|---|
| (predeterminado) |
Nota: En todas las instrucciones y configuraciones a continuación, se utiliza el paquete demo. Cambie este paquete según corresponda para su aplicación y la ubicación donde coloque los archivos fuente parcheados.
Determine la clase de solución alternativa que necesita según su tipo de configuración de seguridad.
| Valor de Configuración | Clase de Solución Alternativa |
|---|---|
Annotation | PatchedAnnotationFilterInvocationDefinition |
InterceptUrlMap | PatchedInterceptUrlMapFilterInvocationDefinition |
Copie el archivo fuente correspondiente en su árbol fuente src/main/groovy.
Finalmente, agregue la siguiente configuración a su archivo de configuración application.groovy, reemplazando PatchedAnnotationFilterInvocationDefinition con la clase de solución alternativa necesaria.
grails.plugin.springsecurity.objectDefinitionSourceBeanClass = 'demo.PatchedAnnotationFilterInvocationDefinition'
Como se indicó anteriormente, determine la clase de solución alternativa que necesita según su tipo de configuración de seguridad. Copie el archivo fuente correspondiente en su árbol fuente src/groovy. Luego edite la configuración de su bean según el tipo de configuración de seguridad de su aplicación.
Si utiliza el tipo de configuración de seguridad Annotation, edite 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 ...
}
Si utiliza el tipo de configuración de seguridad InterceptUrlMap, edite 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 ...
}
Si utiliza el tipo de configuración de seguridad Requestmap, edite 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 obtener información adicional sobre esta vulnerabilidad, consulte la publicación del blog de Grails.
Las discusiones y preguntas pueden dirigirse a este issue en GitHub del complemento Grails Spring Security Core.
Annotation| Anotaciones Seguras |
InterceptUrlMap | Mapa Estático |
Requestmap | Instancias de Requestmap |
RequestmapPatchedRequestmapFilterInvocationDefinition |