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 框架開發團隊……