Spring Security 安全公告

CVE-2017-8046:Spring Data REST 中 PATCH 请求中的 RCE

严重 | 2017年9月21日 | CVE-2017-8046

描述

提交到使用 Spring Data REST 支持的 HTTP 资源的服务器的恶意 PATCH 请求可以使用特制的 JSON 数据来运行任意 Java 代码。

受影响的 Spring 产品和版本

  • 早于 2.6.9 (Ingalls SR9)、3.0.1 (Kay SR1) 的 Spring Data REST 版本
  • 早于 1.5.9、2.0 M6 的 Spring Boot(如果使用了 Spring Data REST 模块)版本

缓解措施

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

  • 已修复此问题的版本包括:<ul><li>Spring Data REST 2.6.9 (Ingalls SR9,2017年10月27日)</li><li>Spring Data REST 3.0.1 (Kay SR1,2017年10月27日)</li><li>Spring Boot 1.5.9 (2017年10月28日)</li><li>Spring Boot 2.0 M6 (2017年11月6日)</li></ul>

致谢

此漏洞由来自 Semmle 和 lgtm.com 的莫曼月负责报告。

参考资料

CVE-2017-8045:spring-amqp 中的远程代码执行

高危 | 2017年9月19日 | CVE-2017-8045

描述

在受影响版本的 Spring AMQP 中,当`org.springframework.amqp.core.Message`转换为字符串时,可能存在不安全的反序列化。可以制作恶意有效负载来利用此漏洞并启用远程代码执行攻击。

受影响的 Spring 产品和版本

  • 早于 1.7.4、1.6.11 和 1.5.7 的 Spring AMQP 版本

缓解措施

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

  • 已修复此问题的版本包括:<ul><li>Spring AMQP:2.0.0、1.7.4、1.6.11、1.5.7</li></ul>

致谢

此漏洞由来自 Semmle 和 lgtm.com 的莫曼月负责报告。

参考资料

CVE-2017-8039:Spring Web Flow 中的数据绑定表达式漏洞

中危 | 2017年9月15日 | CVE-2017-8039

描述

此 CVE 解决了与CVE-2017-4971中描述的漏洞相同的第二个利用途径。

不更改默认情况下禁用的`MvcViewFactoryCreator useSpringBinding`属性值(即设置为“false”)的应用程序可能容易受到处理表单提交但没有子元素声明显式数据绑定属性映射的视图状态中的恶意 EL 表达式的攻击。

受影响的 Spring 产品和版本

  • Spring Web Flow 2.4.0 到 2.4.5
  • 旧的、不受支持的版本也受影响

缓解措施

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

  • 2.4.x 用户应升级到 2.4.6

请注意,通常情况下,在视图状态中始终使用显式数据绑定声明是一个良好的实践,并建议这样做,以防止表单提交设置目标对象上不应设置的字段。

使用 Spring Web Flow 和 JSF 的用户不受此报告的影响。

致谢

该问题由安全研究员 he1renyagao 发现。

参考资料

CVE-2017-4995:Jackson 配置允许使用未知的“序列化工具”执行代码

低危 | 2017年6月8日 | CVE-2017-4995

描述

当配置为启用默认类型时,Jackson 包含一个反序列化漏洞,可能导致任意代码执行。Jackson 通过将已知的“反序列化工具”列入黑名单来修复此漏洞。

Spring Security 使用启用了全局默认类型的 Jackson 进行配置,这意味着通过之前的漏洞利用,如果满足以下所有条件,则可以执行任意代码

  • Spring Security 的 Jackson 支持正在通过调用 SecurityJackson2Modules.getModules(ClassLoader) 或 SecurityJackson2Modules.enableDefaultTyping(ObjectMapper) 来利用
  • Jackson 用于反序列化不受信任的数据。Spring Security 不使用 Jackson 执行反序列化,因此这是用户的明确选择。
  • 类路径上存在一个未知的(Jackson 尚未列入黑名单)“反序列化工具”,允许执行代码

Jackson 提供了一种黑名单方法来防止此类攻击,但当 Spring Security 启用默认类型时,Spring Security 应该积极主动地阻止未知的“反序列化工具”。

受影响的 Spring 产品和版本

  • Spring Security 4.2.0.RELEASE - 4.2.2.RELEASE
  • Spring Security 5.0.0.M1

缓解措施

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

  • 已修复此问题的版本包括:<ul><li>Spring Security:4.2.3.RELEASE+</li><li>Spring Security:5.0.0.M2+</li></ul>
  • 此修复程序确保默认情况下,只有显式映射的类将被反序列化。使用显式映射类的效果是创建一个与所有受支持的 Jackson 版本兼容的白名单。如果用户显式选择

参考资料

CVE-2017-4971:Spring Web Flow 中的数据绑定表达式漏洞

中危 | 2017年5月31日 | CVE-2017-4971

描述

不更改默认情况下禁用的`MvcViewFactoryCreator useSpringBinding`属性值(即设置为“false”)的应用程序可能容易受到处理表单提交但没有子元素声明显式数据绑定属性映射的视图状态中的恶意 EL 表达式的攻击。

受影响的 Spring 产品和版本

  • Spring Web Flow 2.4.0 到 2.4.4
  • 旧的、不受支持的版本也受影响

缓解措施

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

  • 2.4.x 用户应升级到 2.4.5
  • 请注意,通常情况下,在视图状态中始终使用显式数据绑定声明是一个良好的实践,并建议这样做,以防止表单提交设置目标对象上不应设置的字段。
  • 使用 Spring Web Flow 和 JSF 的用户不受此报告的影响。

致谢

该问题由 Gotham Digital Science 的 Stefano Ciccone 发现

参考资料

CVE-2016-9879 路径变量中编码的“/”

高危 | 2016年12月28日 | CVE-2016-9879

描述

Spring Security 在处理安全约束时不考虑 URL 路径参数。通过向请求添加具有编码的“/”的 URL 路径参数,攻击者可能能够绕过安全约束。此问题的根本原因是 Servlet 规范中关于处理路径参数的说明不够清晰(见下文)。一些 Servlet 容器在返回值中包含路径参数`getPathInfo()`,而有些则不包含。Spring Security 使用`getPathInfo()`返回的值作为将请求映射到安全约束过程的一部分。路径参数的意外存在会导致约束被绕过。

Apache Tomcat(所有当前版本)的用户不受此漏洞的影响,因为 Tomcat 遵循 Servlet 专家组先前提供的指南,并从`getContextPath()`、`getServletPath()`和`getPathInfo()`返回的值中去除路径参数[1]。

基于Apache Tomcat的其他Servlet容器的用户可能会受到影响,也可能不会受到影响,这取决于路径参数的处理方式是否被修改。

已知IBM WebSphere Application Server 8.5.x的用户受到影响。

实现Servlet规范的其他容器的用户可能会受到影响。

[1] https://issues.apache.org/bugzilla/show_bug.cgi?id=25015

受影响的 Spring 产品和版本

  • Spring Security 3.2.0 - 3.2.9
  • Spring Security 4.0.x - 4.1.3
  • Spring Security 4.2.0
  • 旧的、不受支持的版本也受影响

缓解措施

采用以下任何一种缓解措施可以防止此漏洞。

  • 使用已知不会在getServletPath()和getPathInfo()的返回值中包含路径参数的Servlet容器
  • 升级到Spring Security 3.2.10、4.1.4或4.2.1将使用RequestRejectedException拒绝请求,如果检测到编码的"/"。注意:如果您希望禁用此功能,可以通过设置DefaultHttpFirewall.allowUrlEncodedSlash = true来禁用它。但是,禁用此功能意味着应用程序将变得脆弱(在getServletPath()或getPathInfo()中返回路径参数的容器中)。

致谢

此问题由NTT DATA Corporation的Shumpei Asahara和Yuji Ito发现,并被负责任地报告给Pivotal。

参考资料

CVE-2016-9878 Spring框架ResourceServlet中的目录遍历漏洞

低危 | 2016年12月21日 | CVE-2016-9878

描述

提供给ResourceServlet的路径未正确清理,因此容易受到目录遍历攻击。

受影响的 Spring 产品和版本

  • Spring Framework 4.3.0 到 4.3.4
  • Spring Framework 4.2.0 到 4.2.8
  • Spring Framework 3.2.0 到 3.2.17
  • 旧的、不受支持的版本也受影响

缓解措施

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

  • 4.3.x用户应升级到4.3.5
  • 4.2.x用户应升级到4.2.9
  • 3.2.x用户应升级到3.2.18

请注意,很少有应用程序可能会使用ResourceServlet。自3.0版本(大约2009年)以来,它已被ResourceHttpRequestHandler和相关类(默认情况下已使用并提供更高级的功能)所取代,请参阅参考文档中的“服务资源”。ResourceServlet在3.2.x和4.x中已被弃用,从5.0版本开始完全移除。

致谢

此问题由NTT DATA Corporation的Shumpei Asahara和Yuji Ito发现,并被负责任地报告给Pivotal。

参考资料

CVE-2016-6652 Spring Data JPA 盲注SQL注入漏洞

中危 | 2016年9月30日 | CVE-2016-6652

描述

传递给使用手动声明的JPQL查询的用户定义Spring Data存储库查询方法的Sort实例按原样传递给持久性提供程序,并允许攻击者将任意JPQL注入到ORDER BY子句中,他们可能会根据查询结果的元素顺序变化(取决于注入的JPQL)来推断非公开字段的信息。

如果Sort实例是从不可信来源创建的(例如,Web请求参数),则尤其如此。

受影响的 Spring 产品和版本

  • Spring Data JPA 1.10.2, 1.9.4
  • 其他不受支持的版本也受到影响

缓解措施

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

  • 建议用户升级到1.10.4(Hopper SR4)或1.9.6(Gosling SR6)版本的Spring Data JPA。这些版本包含对传递到数据访问层的Sort实例的清理,并且只允许引用域对象字段和在支持查询方法的JPQL中使用的别名。
  • 如果用户仍然需要将复杂的排序表达式传递到数据访问层,他们可以使用新引入的JpaSort.unsafe(…)来重新启用旧的行为。

致谢

此漏洞由Silverskin Information Security的Niklas Särökaari以及来自…的Joona Immonen、Arto Santala、Antti Virtanen、Michael Holopainen和Antti Ahola负责任地报告。

CVE-2016-4977 Spring Security OAuth中的远程代码执行(RCE)

高危 | 2016年7月5日 | CVE-2016-4977

描述

在使用白标视图处理授权请求时,response_type参数值被执行为Spring SpEL,这使得恶意用户可以通过构造response_type的值来触发远程代码执行。

受影响的 Spring 产品和版本

  • 2.0.0 到 2.0.9
  • 1.0.0 到 1.0.5

缓解措施

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

  • 1.0.x用户不应将白标视图用于批准和错误页面
  • 2.0.x用户不应将白标视图用于批准和错误页面,或者升级到2.0.10或更高版本

致谢

此问题由David Vieira-Kurz (@secalert)发现,并由Oliver Schoenherr代表Immobilien Scout GmbH报告。

参考资料

领先一步

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

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部