CVE-2019-3778:spring-security-oauth2 中的开放重定向器
描述
Spring Security OAuth 版本 2.3 早于 2.3.5,2.2 早于 2.2.4,2.1 早于 2.1.4,2.0 早于 2.0.17,以及更老的,不受支持的版本,可能容易受到开放重定向攻击,从而泄露授权码。恶意用户或攻击者可以通过授权码授权类型,向授权端点精心构造请求,并通过“redirect_uri”参数指定经过篡改的重定向 URI。这可能导致授权服务器将资源所有者用户代理重定向到攻击者控制下的 URI,并泄露授权码。
此漏洞暴露了满足以下所有要求的应用程序
- 充当授权服务器的角色(例如 ` @EnableAuthorizationServer `)
- 在 `AuthorizationEndpoint` 中使用 `DefaultRedirectResolver`
此漏洞**不会**暴露以下应用程序
- 充当授权服务器角色并使用非
DefaultRedirectResolver的RedirectResolver实现 - 仅充当资源服务器的角色(例如 ` @EnableResourceServer `)
- 仅充当客户端的角色(例如 ` @EnableOAuthClient `)
受影响的 Spring 产品和版本
- Spring Security OAuth 2.3 到 2.3.4
- Spring Security OAuth 2.2 到 2.2.3
- Spring Security OAuth 2.1 到 2.1.3
- Spring Security OAuth 2.0 到 2.0.16
- 更旧的不受支持的版本也受到影响
缓解措施
受影响版本的用户应采取以下缓解措施
- 2.3.x 用户应升级到 2.3.5
- 2.2.x 用户应升级到 2.2.4
- 2.1.x 用户应升级到 2.1.4
- 2.0.x 用户应升级到 2.0.17
- 旧版本应升级到受支持的分支
无需其他缓解步骤。
对于 Spring Boot 1.5.x 和 Spring IO Platform Cairo 的用户,强烈建议将 spring-security-oauth 版本覆盖为包含此 CVE 补丁的最新版本。为了覆盖版本,您需要声明/设置属性 spring-security-oauth.version。
以下是 **Spring Boot 1.5.x** 用户的说明。
要使用 Maven 覆盖属性,请在 pom 的 `
要使用 Gradle 覆盖属性,请在您的 build.gradle 脚本中配置值
ext['spring-security-oauth.version'] = '2.0.17.RELEASE'
或者在 gradle.properties 中
spring-security-oauth.version=2.0.17.RELEASE
注意:同样的说明适用于 Spring IO Platform Cairo 的用户。但是,要指定的版本是 2.2.4.RELEASE。
致谢
此问题由 dotloop 的 Dirk Koehler (github.com/phrinx) 识别并负责任地报告。特别感谢 NTT、NTT Comware、NTT DATA 的 Macchinetta 框架开发团队……