CVE-2019-3778:spring-security-oauth2 中的开放重定向器

危急 | 2019年2月21日 | CVE-2019-3778

描述

Spring Security OAuth 版本 2.3 早于 2.3.52.2 早于 2.2.42.1 早于 2.1.42.0 早于 2.0.17,以及更老的,不受支持的版本,可能容易受到开放重定向攻击,从而泄露授权码。恶意用户或攻击者可以通过授权码授权类型,向授权端点精心构造请求,并通过“redirect_uri”参数指定经过篡改的重定向 URI。这可能导致授权服务器将资源所有者用户代理重定向到攻击者控制下的 URI,并泄露授权码。

此漏洞暴露了满足以下所有要求的应用程序

  • 充当授权服务器的角色(例如 ` @EnableAuthorizationServer `)
  • 在 `AuthorizationEndpoint` 中使用 `DefaultRedirectResolver`

此漏洞**不会**暴露以下应用程序

  • 充当授权服务器角色并使用非 DefaultRedirectResolverRedirectResolver 实现
  • 仅充当资源服务器的角色(例如 ` @EnableResourceServer `)
  • 仅充当客户端的角色(例如 ` @EnableOAuthClient `)

受影响的 Spring 产品和版本

  • Spring Security OAuth 2.32.3.4
  • Spring Security OAuth 2.22.2.3
  • Spring Security OAuth 2.12.1.3
  • Spring Security OAuth 2.02.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.xSpring IO Platform Cairo 的用户,强烈建议将 spring-security-oauth 版本覆盖为包含此 CVE 补丁的最新版本。为了覆盖版本,您需要声明/设置属性 spring-security-oauth.version

以下是 **Spring Boot 1.5.x** 用户的说明。

要使用 Maven 覆盖属性,请在 pom 的 `` 部分声明该属性


2.0.17.RELEASE

要使用 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 框架开发团队……

CVE-2019-3772:XML 外部实体注入 (XXE)

危急 | 2019年1月14日 | CVE-2019-3772

描述

Spring Integration (spring-integration-xml 和 spring-integration-ws 模块) 版本 4.3.18、5.0.10、5.1.1 以及更早的不受支持版本,在接收来自不可信源的 XML 数据时,容易受到 XML 外部实体注入 (XXE) 的影响。

受影响的 Spring 产品和版本

  • Spring Integration 版本 5.1.1、5.0.10、4.3.18 及更早版本

缓解措施

受影响版本的用户应采取以下缓解措施

  • 将 spring-integration-ws、spring-integration-xml 升级到 4.3.19、5.0.11、5.1.2 或更高版本。
  • 存在此漏洞的 Spring Integration 组件现在默认禁用参考备忘单 [1] 中建议的功能,但如果 XML 来自受信任的源,并且可以启用该功能,则允许用户配置组件。

参考资料

历史

2019-01-14:发布初始漏洞报告。

CVE-2019-3773:XML 外部实体注入 (XXE)

危急 | 2019年1月14日 | CVE-2019-3773

描述

Spring Web Services 版本 2.4.3、3.0.4 以及所有三个项目更早的不受支持版本,在接收来自不可信源的 XML 数据时,容易受到 XML 外部实体注入 (XXE) 的影响。

受影响的 Spring 产品和版本

  • Spring Web Services 版本 2.4.3、3.0.4 及更早版本

缓解措施

受影响版本的用户应采取以下缓解措施

  • 将 spring-ws、spring-xml jar 升级到 2.4.4、3.0.6 或更高版本
  • 存在此漏洞的 Spring Web Services 组件现在默认禁用参考备忘单 [1] 中建议的功能,但如果 XML 来自受信任的源,并且可以启用该功能,则允许用户配置组件。

参考资料

历史

2019-01-14:发布初始漏洞报告。

CVE-2019-3774:XML 外部实体注入 (XXE)

危急 | 2019年1月14日 | CVE-2019-3774

描述

Spring Batch 版本 3.0.9、4.0.1、4.1.0 以及更早的不受支持版本,在接收来自不可信源的 XML 数据时,容易受到 XML 外部实体注入 (XXE) 的影响。

受影响的 Spring 产品和版本

  • Spring Batch 版本 3.0.9、4.0.1、4.1.0 及更早版本

缓解措施

受影响版本的用户应采取以下缓解措施

  • 将 spring-batch jar 升级到 3.0.10、4.0.2、4.1.1 或更高版本
  • 存在此漏洞的 Spring Batch 组件现在默认禁用参考备忘单 [1] 中建议的功能,但如果 XML 来自受信任的源,并且可以启用该功能,则允许用户配置组件。

参考资料

历史

2019-01-14:发布初始漏洞报告。

CVE-2018-15801:使用 spring-security 进行 JWT 颁发者验证期间的授权绕过

| 2018年12月18日 | CVE-2018-15801

描述

Spring Security 5.1.x 版本(早于 5.1.2)在 JWT 颁发者验证期间包含一个授权绕过漏洞。要受到影响,必须在签署 JWT 时使用诚实颁发者和恶意用户相同的私钥。在这种情况下,恶意用户可以伪造带有恶意颁发者 URL 的已签名 JWT,该 JWT 可能会被授予给诚实颁发者。

受影响的 Spring 产品和版本

  • Spring Framework 5.1 到 5.1.1

缓解措施

受影响版本的用户应采取以下缓解措施

  • 5.1.x 用户应升级到 5.1.2

无需其他缓解步骤。

致谢

此问题由 Björn Bilger 识别并负责任地报告。

参考资料

CVE-2018-15758:spring-security-oauth2 中的权限提升

危急 | 2018年10月16日 | CVE-2018-15758

描述

Spring Security OAuth 版本 2.3 早于 2.3.4,2.2 早于 2.2.3,2.1 早于 2.1.3,2.0 早于 2.0.16,以及更早的不受支持版本,在某些条件下可能容易受到权限提升的影响。恶意用户或攻击者可以精心构造请求到批准端点,从而修改先前保存的授权请求,并导致在随后的批准中权限提升。如果应用程序配置为使用声明 AuthorizationRequest 作为控制器方法参数的自定义批准端点,则可能发生此情况。

此漏洞暴露了满足以下所有要求的应用程序

  • 充当授权服务器的角色(例如 ` @EnableAuthorizationServer `)
  • 使用声明 AuthorizationRequest 作为控制器方法参数的自定义批准端点

此漏洞不会暴露以下应用程序:

  • 充当授权服务器角色并使用默认批准端点
  • 仅充当资源服务器的角色(例如 ` @EnableResourceServer `)
  • 仅充当客户端的角色(例如 ` @EnableOAuthClient `)

受影响的 Spring 产品和版本

  • Spring Security OAuth 2.3 到 2.3.3
  • Spring Security OAuth 2.2 到 2.2.2
  • Spring Security OAuth 2.1 到 2.1.2
  • Spring Security OAuth 2.0 到 2.0.15
  • 更旧的不受支持的版本也受到影响

缓解措施

受影响版本的用户应采取以下缓解措施

  • 2.3.x 用户应升级到 2.3.4
  • 2.2.x 用户应升级到 2.2.3
  • 2.1.x 用户应升级到 2.1.3
  • 2.0.x 用户应升级到 2.0.16
  • 旧版本应升级到受支持的分支

无需其他缓解措施。

致谢

此问题由 Micro Focus 的 Alvaro Muñoz (@pwntester) 识别并负责任地报告。

参考资料

CVE-2018-15756:通过范围请求进行 DoS 攻击

| 2018年10月16日 | CVE-2018-15756

描述

Spring Framework 5.1 版、5.0.x 版(早于 5.0.10)、4.3.x 版(早于 4.3.20)以及 4.2.x 分支上更早的不受支持版本,通过 ResourceHttpRequestHandler 提供对静态资源的服务时支持范围请求,或者从 5.0 版开始,当带注解的控制器返回 org.springframework.core.io.Resource 时。恶意用户(或攻击者)可以添加一个具有大量范围、或具有重叠的宽范围、或两者兼有的范围标头,以进行拒绝服务攻击。

此漏洞影响依赖 spring-webmvc 或 spring-webflux 的应用程序。此类应用程序还必须注册以提供静态资源(例如 JS、CSS、图像等),或者具有返回 org.springframework.core.io.Resource 的带注解控制器。

依赖 spring-boot-starter-web 或 spring-boot-starter-webflux 的 Spring Boot 应用程序开箱即用即可提供静态资源,因此容易受到攻击。

受影响的 Spring 产品和版本

  • Spring Framework 5.1
  • Spring Framework 5.0.0 到 5.0.9
  • Spring Framework 4.3 到 4.3.19
  • 更早的不受支持版本(可追溯到 4.2)也受影响

缓解措施

受影响版本的用户应采取以下缓解措施

  • 5.1 用户应升级到 5.1.1
  • 5.0.x 用户应升级到 5.0.10
  • 4.3.x 用户应升级到 4.3.20
  • 4.2.x 用户应升级到受支持的分支。

无需进一步的缓解措施。

评估影响时请注意以下事项

  • 范围请求支持是在 4.2 版本中引入的。因此,早于 4.2 的版本不受此问题影响。
  • 从带注解的控制器返回 org.springfamework.core.io.Resource 的支持是在 5.0 版本中引入的。因此,早于 5.0 的版本只能通过注册以提供静态资源而受到影响。

致谢

此问题由 Aruba Threat Labs 的 Nicholas Starke 识别并负责任地报告。

历史

2018-10-16:发布初始漏洞报告。

CVE-2018-11087:RabbitMQ (Spring-AMQP) 主机名验证

危急 | 2018年9月11日 | CVE-2018-11087

描述

spring-amqp 1.x 版本早于 1.7.10,2.x 版本早于 2.0.6 存在中间人漏洞。

Spring RabbitMQ Java 客户端不执行主机名验证。

这意味着其他主机的 SSL 证书只要受信任,就会被盲目接受。

要利用此漏洞,攻击者必须在使用 Spring RabbitMQ Java 客户端的 Java 应用程序和其连接的 RabbitMQ 服务器之间执行中间人 (MITM) 攻击。

TLS 通常可以保护用户和系统免受 MITM 攻击,但如果客户端接受来自其他受信任主机的证书,则无法实现。

Spring AMQP 使用 RabbitMQ amqp-client java 库与 RabbitMQ 通信。

它使用 RabbitConnectionFactoryBean 创建/配置连接工厂。

受影响的 Spring 产品和版本

  • Spring-AMQP 版本早于 1.7.10 和 2.0.6
  • RabbitMQ amqp-client 版本早于 4.8.0 和 5.4.0

缓解措施

受影响版本的用户应采取以下缓解措施

  • 升级到 1.7.10.RELEASE 或 2.0.6.RELEASE 并将 enableHostnameValidation 属性设置为 true。将传递性 amqp-client 版本分别覆盖为至少 4.8.0 和 5.4.0。
  • 即将发布的 2.1.0.RELEASE 将默认将该属性设置为 true。
  • 如果您直接使用 amqp-client 库创建连接工厂,请参阅其 javadoc 中 enableHostnameValidation() 方法的说明。

致谢

此问题由瑞士 Alphabot Security 的 Peter Stöckli 识别并负责任地报告。

历史

2018-09-11:发布初始漏洞报告。

CVE-2018-11039:Spring Framework 中的跨站跟踪 (XST)

中等 | 2018年6月14日 | CVE-2018-11039

描述

Spring Framework(5.0.x 版本早于 5.0.7,4.3.x 版本早于 4.3.18,以及更早的不受支持版本)允许 Web 应用程序使用 Spring MVC 中的 HiddenHttpMethodFilter 将 HTTP 请求方法更改为任何 HTTP 方法(包括 TRACE)。如果应用程序存在预先存在的 XSS 漏洞,恶意用户(或攻击者)可以使用此过滤器升级为 XST(跨站跟踪)攻击。

受影响的 Spring 产品和版本

  • Spring Framework 5.0 到 5.0.6
  • Spring Framework 4.3 到 4.3.17
  • 更旧的不受支持的版本也受到影响

缓解措施

受影响版本的用户应采取以下缓解措施

  • 5.0.x 用户应升级到 5.0.7
  • 4.3.x 用户应升级到 4.3.18
  • 旧版本应升级到受支持的分支

无需其他缓解步骤。

此攻击适用于以下应用程序:

  • 使用 HiddenHttpMethodFilter(在 Spring Boot 中默认启用)
  • 允许应用程序服务器处理 HTTP TRACE 请求

此攻击不能直接利用,因为攻击者必须通过 HTTP POST 发出跨域请求,这被同源策略禁止。这就是为什么 Web 应用程序本身存在预先存在的 XSS(跨站脚本)漏洞是升级到 XST 所必需的。

致谢

此问题由 Ocado Technology 的 Mariusz Łuciów 识别并报告。

历史

2018-06-14:发布初始漏洞报告。

CVE-2018-11040:MappingJackson2JsonView 中默认启用 JSONP

中等 | 2018年6月14日 | CVE-2018-11040

描述

Spring Framework 版本 5.0.x 早于 5.0.7、4.3.x 早于 4.3.18,以及更早的不受支持版本,允许 Web 应用程序通过 AbstractJsonpResponseBodyAdvice 为 REST 控制器和 MappingJackson2JsonView 为浏览器请求启用 JSONP(JSON with Padding)进行跨域请求。两者在 Spring Framework 和 Spring Boot 中默认均未启用。然而,当 MappingJackson2JsonView 在应用程序中配置时,JSONP 支持通过“jsonp”和“callback”JSONP 参数自动可用,从而实现跨域请求。

允许来自不受信任来源的跨域请求可能会将用户信息暴露给第三方浏览器脚本。

此漏洞适用于以下应用程序:

  • 显式配置 MappingJackson2JsonView。
  • 并且未将 MappingJackson2JsonView 的 jsonpParameterNames 属性设置为空集。
  • 并且通过可以渲染 JSONP 内容的端点暴露敏感用户信息。

受影响的 Spring 产品和版本

  • Spring Framework 5.0 到 5.0.6
  • Spring Framework 4.1 到 4.3.17

缓解措施

受影响版本的用户应采取以下缓解措施

  • 5.0.x 用户应升级到 5.0.7。
  • 4.3.x 用户应升级到 4.3.18。
  • 更旧版本应升级到受支持的分支,否则将 MappingJacksonJsonView 的 jsonpParameterNames 属性设置为空集。

确实需要 JSONP 支持的应用程序在升级后需要显式配置 MappingJacksonJsonView 的 jsonpParameterNames 属性。建议应用程序改用 CORS 而不是 JSONP 来启用跨域请求。Spring Framework 中对 JSONP 的支持在 5.0.7 和 4.3.18 中已弃用,并将在 5.1 中删除。

致谢

此问题由 Meyyalagan Chandrasekaran 识别并报告。

参考资料

  • SPR-16798 “弃用 JSONP 支持并更新 MappingJackson2JsonView”
  • 示例

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有