
未パッチの Grails Spring Security Core (GSSC) プラグインで発見された 脆弱性 CVE-2022-41923 は、 不適切な特権管理 を引き起こす可能性があります。 このリポジトリでは、この問題の回避策について説明します。
パッチ未適用のバージョンのプラグインを使用している場合は、パッチ済みバージョンへのアップグレードを強く推奨します。 すぐにアップグレードできない場合は、本ドキュメントで説明する回避策の実装を推奨します。 これは特に GSSC プラグインバージョン 2.x を使用している場合に重要です。バージョン 2.x にはパッチが提供されていないためです。
回避策を正しく設定するには、以下を把握する必要があります。
アプリケーションが使用している GSSC プラグインのバージョン。build.gradle ファイル内のバージョン番号を確認してください。
(Grails 2.x の場合は BuildConfig.groovy ファイルを確認してください)。
使用しているセキュリティ設定の種類。つまり、grails.plugin.springsecurity.securityConfigType の設定値。
| 設定値 | ドキュメントリファレンス |
|---|---|
Annotation (デフォルト) | Secured Annotations |
InterceptUrlMap | Static Map |
Requestmap | Requestmap Instances |
注:以下のすべての説明と設定では、demo パッケージを使用しています。
アプリケーションに合わせて、パッチを適用したソースファイルを配置する場所に応じて、このパッケージを適宜変更してください。
セキュリティ設定の種類に基づいて、必要な回避策クラスを特定します。
| 設定値 | 回避策クラス |
|---|---|
Annotation | PatchedAnnotationFilterInvocationDefinition |
InterceptUrlMap | PatchedInterceptUrlMapFilterInvocationDefinition |
Requestmap | PatchedRequestmapFilterInvocationDefinition |
対応するソースファイルを src/main/groovy ソースツリーにコピーします。
最後に、application.groovy 設定ファイルに以下の設定を追加します。
PatchedAnnotationFilterInvocationDefinition は必要な回避策クラスに置き換えてください。
grails.plugin.springsecurity.objectDefinitionSourceBeanClass = 'demo.PatchedAnnotationFilterInvocationDefinition'
上記と同様に、セキュリティ設定の種類に基づいて必要な回避策クラスを特定します。
対応するソースファイルを src/groovy ソースツリーにコピーします。
次に、アプリケーションのセキュリティ設定の種類に基づいて、Bean 設定を編集します。
セキュリティ設定の種類が 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
}
}
// ... 既存の Bean 設定 ...
}
セキュリティ設定の種類が 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
}
}
// ... 既存の Bean 設定 ...
}
セキュリティ設定の種類が 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
}
}
// ... 既存の Bean 設定 ...
}
この脆弱性の詳細については、Grails ブログ記事 を参照してください。
ディスカッションや質問は、この Grails Spring Security Core プラグインの GitHub イシュー で行うことができます。