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

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

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

致谢

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

参考资料

CVE-2017-4995: Jackson 配置允许通过未知“反序列化小工具”执行代码

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

描述

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

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

  • 正在通过调用 SecurityJackson2Modules.getModules(ClassLoader) 或 SecurityJackson2Modules.enableDefaultTyping(ObjectMapper) 利用 Spring Security 的 Jackson 支持
  • 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 版本兼容的白名单。如果用户明确选择启用<a href='https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization#11-global-default-typing'>全局默认类型</a>,则恢复之前潜在危险的配置。

参考资料

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
  • 请注意,通常情况下,建议始终在视图状态中使用显式数据绑定声明,以防止表单提交设置目标对象上不应设置的字段,这是一种良好的实践。
  • 使用 JSF 的 Spring Web Flow 用户不受此报告影响。

致谢

该问题由 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 Framework 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.x 版本开始完全移除。

致谢

该问题由 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。这些版本包含对传递给数据访问层的 <code>Sort</code> 实例的清理,并且只允许引用查询方法背后 JPQL 中使用的领域对象字段和别名。
  • 如果用户仍然需要将复杂的排序表达式传递给数据访问层,他们可以使用新引入的 <code>JpaSort.unsafe(…)</code> 来恢复旧行为。

致谢

该漏洞由 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 报告。

参考资料

CVE-2016-2173 Spring AMQP 中的远程代码执行

危急 | 2016 年 4 月 11 日 | CVE-2016-2173

描述

类 org.springframework.core.serializer.DefaultDeserializer 不会根据白名单验证反序列化对象。通过提供一个精心构造的序列化对象,例如 Chris Frohoff 的 Commons Collection 小工具,可以实现远程代码执行。

受影响的 Spring 产品和版本

  • 1.0.0 到 1.5.4

缓解措施

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

  • 所引用的类 (DefaultDeserializer) 不会被任何 Spring 应用程序上下文自动注册;用户在使用此类的对象时,如果来自不可信来源,应像直接使用 ObjectInputStream 一样谨慎。
  • Spring AMQP 有一个(可选的)消息转换器可以使用此反序列化器;从 1.5.5 版本开始,该转换器现在可以配置一个可接受的反序列化包/类的白名单。
  • Spring AMQP 还有一个 SimpleMessageConverter,它*是*默认配置的;它不使用反序列化器,但内部使用 ObjectInputStream;它现在也可以配置一个包/类的白名单。
  • 建议用户在 RabbitMQ 环境中可能接收到不受信任的数据时,不要使用 Java 序列化;如果使用,应配置转换器以允许接受的对象。
  • 可能面临此漏洞的用户应升级到 Spring AMQP 1.5.5 或更高版本并配置白名单。

致谢

漏洞发现者:Code White 的 Matthias Kaiser (www.code-white.com)

参考资料

CVE-2015-5258 Spring Social CSRF

| 2015 年 11 月 12 日 | CVE-2015-5258

描述

当针对 OAuth 2 API 提供商授权应用程序时,Spring Social 容易受到跨站请求伪造 (CSRF) 攻击。攻击涉及恶意用户使用虚假帐户启动 OAuth 2 授权流程,但通过诱骗受害者在其浏览器中访问回调请求来完成它。因此,攻击者将通过虚假提供商帐户访问受害者在易受攻击站点上的帐户。

受影响的 Spring 产品和版本

  • Spring Social Core 1.0.0 到 1.0.3
  • Spring Social Core 1.1.0 到 1.1.2

缓解措施

受影响的 Spring Social 版本的用户应按如下方式升级

  • 对于 Spring Social 1.0.x 升级到 1.1.3+
  • 对于 Spring Social 1.1.x 升级到 1.1.3+

在上述版本中,Spring Social 要求回调请求中存在一个 `state` 参数。如果未找到,则会抛出 IllegalStateException,并且授权流程终止。

致谢

该问题最初由 Include Security 的 Kris Bosch 发现。然后,sourceclear (https://srcclr.com) 的 Paul Ambrosini 识别出根本原因、易受攻击的库和易受攻击的代码。

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看所有