
Guide de contournement pour la vulnérabilité de gestion des privilèges CVE-2022-41923 dans le plugin Grails Spring Security Core, fournissant des définitions de filtre corrigées pour les configurations Annotation, InterceptUrlMap et Requestmap.
La vulnérabilité CVE-2022-41923 trouvée dans le plugin non patché Grails Spring Security Core (GSSC) peut entraîner une gestion inadéquate des privilèges. Ce dépôt décrit comment contourner le problème.
Si vous utilisez une version non patchée du plugin, nous vous recommandons vivement de passer à une version patchée. Si vous ne pouvez pas mettre à jour immédiatement, nous vous encourageons à mettre en œuvre la solution de contournement décrite dans ce document. Ceci est particulièrement important si vous utilisez la version 2.x du plugin GSSC, car aucun patch n'est disponible pour la version 2.x.
Pour configurer correctement la solution de contournement, vous devez connaître :
La version du plugin GSSC utilisée par votre application. Recherchez le numéro de version dans votre fichier build.gradle.
(Pour Grails 2.x, cherchez dans le fichier BuildConfig.groovy).
Quel type de configuration de sécurité vous utilisez : c'est-à-dire la valeur de configuration pour
grails.plugin.springsecurity.securityConfigType
| Valeur de configuration | Référence de documentation |
|---|---|
| (par défaut) |
Remarque : Dans toutes les instructions et configurations ci-dessous, le package demo est utilisé.
Modifiez ce package en fonction de votre application et de l'emplacement où vous placez les fichiers source patchés.
Déterminez la classe de contournement dont vous avez besoin en fonction de votre type de configuration de sécurité.
| Valeur de configuration | Classe de contournement |
|---|---|
Annotation | PatchedAnnotationFilterInvocationDefinition |
InterceptUrlMap | PatchedInterceptUrlMapFilterInvocationDefinition |
Copiez le fichier source correspondant dans votre arborescence source src/main/groovy.
Enfin, ajoutez la configuration suivante à votre fichier de configuration application.groovy,
en remplaçant PatchedAnnotationFilterInvocationDefinition par la classe de contournement nécessaire.
grails.plugin.springsecurity.objectDefinitionSourceBeanClass = 'demo.PatchedAnnotationFilterInvocationDefinition'
Comme ci-dessus, déterminez la classe de contournement dont vous avez besoin en fonction de votre type de configuration de sécurité.
Copiez le fichier source correspondant dans votre arborescence source src/groovy.
Modifiez ensuite votre configuration de bean en fonction du type de configuration de sécurité de votre application.
Si vous utilisez le type de configuration de sécurité Annotation, modifiez le fichier grails-app/conf/spring/resources.groovy pour inclure :
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 vous utilisez le type de configuration de sécurité InterceptUrlMap, modifiez le fichier grails-app/conf/spring/resources.groovy pour inclure :
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 vous utilisez le type de configuration de sécurité Requestmap, modifiez le fichier grails-app/conf/spring/resources.groovy pour inclure :
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 ...
}
Pour plus d'informations sur cette vulnérabilité, veuillez consulter le billet de blog Grails.
Les discussions et questions peuvent être dirigées vers ce problème GitHub du plugin Grails Spring Security Core.
Annotation| Annotations Sécurisées |
InterceptUrlMap | Carte Statique |
Requestmap | Instances Requestmap |
RequestmapPatchedRequestmapFilterInvocationDefinition |