
Guida per il workaround della vulnerabilità di gestione dei privilegi CVE-2022-41923 nel plugin Grails Spring Security Core, che fornisce definizioni di filtro corrette per le configurazioni Annotation, InterceptUrlMap e Requestmap.
La vulnerabilità CVE-2022-41923 trovata nel plugin Grails Spring Security Core (GSSC) non corretto può portare a gestione impropria dei privilegi. Questo repository descrive come risolvere il problema.
Se stai utilizzando una versione non corretta del plugin, ti raccomandiamo vivamente di passare a una versione corretta. Se non puoi eseguire l'aggiornamento immediatamente, ti invitiamo a implementare la soluzione alternativa descritta in questo documento. Questo è particolarmente importante se stai utilizzando il plugin GSSC versione 2.x, poiché non è disponibile alcuna correzione per la versione 2.x.
Per configurare correttamente la soluzione alternativa, è necessario sapere:
La versione del plugin GSSC utilizzata dalla tua applicazione. Cerca il numero di versione nel file build.gradle.
(Per Grails 2.x, cerca nel file BuildConfig.groovy).
Quale tipo di configurazione di sicurezza stai utilizzando: cioè il valore di configurazione per
grails.plugin.springsecurity.securityConfigType
| Valore di configurazione | Riferimento documentazione |
|---|---|
| (default) |
Nota: In tutte le istruzioni e configurazioni seguenti, viene utilizzato il pacchetto demo.
Cambia questo pacchetto appropriatamente per la tua applicazione e la posizione in cui inserisci i file sorgente corretti.
Determina la classe della soluzione alternativa necessaria in base al tipo di configurazione di sicurezza.
| Valore di configurazione | Classe della soluzione alternativa |
|---|---|
Annotation | PatchedAnnotationFilterInvocationDefinition |
InterceptUrlMap | PatchedInterceptUrlMapFilterInvocationDefinition |
Copia il file sorgente corrispondente nella struttura di directory src/main/groovy.
Infine, aggiungi la seguente configurazione al file di configurazione application.groovy,
sostituendo PatchedAnnotationFilterInvocationDefinition con la classe della soluzione alternativa necessaria.
grails.plugin.springsecurity.objectDefinitionSourceBeanClass = 'demo.PatchedAnnotationFilterInvocationDefinition'
Come sopra, determina la classe della soluzione alternativa necessaria in base al tipo di configurazione di sicurezza.
Copia il file sorgente corrispondente nella struttura di directory src/groovy.
Poi modifica la configurazione dei bean in base al tipo di configurazione di sicurezza della tua applicazione.
Se stai utilizzando il tipo di configurazione di sicurezza Annotation, modifica il file grails-app/conf/spring/resources.groovy per includere:
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 stai utilizzando il tipo di configurazione di sicurezza InterceptUrlMap, modifica il file grails-app/conf/spring/resources.groovy per includere:
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 stai utilizzando il tipo di configurazione di sicurezza Requestmap, modifica il file grails-app/conf/spring/resources.groovy per includere:
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 ...
}
Per ulteriori informazioni su questa vulnerabilità, consulta il post sul blog di Grails.
Discussioni e domande possono essere indirizzate a questo issue su GitHub relativo al plugin Grails Spring Security Core.
Annotation| Secured Annotations |
InterceptUrlMap | Static Map |
Requestmap | Requestmap Instances |
Requestmap |
PatchedRequestmapFilterInvocationDefinition |