Spring Security 安全公告

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

严重 | 2016 年 4 月 11 日 | CVE-2016-2173

描述

类 org.springframework.core.serializer.DefaultDeserializer 不会根据白名单验证反序列化的对象。通过提供像 Chris Frohoff 的 Commons Collection gadget 这样的精心制作的反序列化对象,可以实现远程代码执行。

受影响的 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 API 提供程序的虚假帐户开始 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 的 Paul Ambrosini (https://srcclr.com) 随后确定了根本原因、易受攻击的库和易受攻击的代码。

CVE-2015-5211 Spring Framework 中的 RFD 攻击

| 2015 年 10 月 15 日 | CVE-2015-5211

描述

在某些情况下,Spring Framework 易受反射文件下载 (RFD) 攻击。攻击涉及恶意用户使用批处理脚本扩展名制作 URL,该扩展名导致响应被下载而不是呈现,并且还包括反映在响应中的一些输入。

有关详细信息和具体示例,请参阅 Trustwave 提供的非常有帮助的RFD 文档

受影响的 Spring 产品和版本

  • Spring Framework 3.2.0 到 3.2.14
  • Spring Framework 4.0.0 到 4.1.7
  • Spring Framework 4.2.0 到 4.2.1
  • 其他不受支持的版本也受影响

缓解措施

受影响的 Spring Framework 版本的使用者应按如下方式升级

  • 对于 3.2.x,升级到 3.2.15+。
  • 对于 4.0.x 和 4.1.x,升级到 4.1.8+。
  • 对于 4.2.x,升级到 4.2.2+。

在上述版本中,Spring MVC 在使用 HttpMessageConverter 写入之前检查 URL 是否包含文件扩展名,如果扩展名未知,则添加“Content-Disposition”响应标头以建议下载文件名“f.txt”。默认情况下,“已知”扩展名的列表包括与内置 HttpMessageConverter 实现关联的扩展名以及为内容协商目的明确注册的任何其他扩展名。对于 4.x,修复还包括对 SockJS URL 的 URL 检查以及在支持 JSONP 的所有区域中对 JSONP 回调参数的验证。

只需升级到上述版本即可保护应用程序免受 RFD 攻击。还可以采取一些进一步的措施

  • 对 JSON 响应进行编码而不是转义。这也是 OWASP XSS 建议。有关如何使用 Spring 执行此操作的示例,请参阅https://github.com/rwinch/spring-jackson-owasp
  • 配置后缀模式匹配 以将其关闭或仅限制为显式注册的后缀。
  • 配置内容协商,并将属性“useJaf”和“ignoreUknownPathExtension”设置为 false,这将导致对具有未知扩展名的 URL 返回 406 响应。但是,请注意,如果 URL 自然预期在末尾带有点,则这可能不是一种选择。
  • 向响应添加“X-Content-Type-Options: nosniff”标头。Spring Security 4 默认执行此操作。

鸣谢

Trustwave 在一篇文档中描述了 RFD 攻击。Spring Framework 中的问题是由 HPE Security Research 的 Alvaro Muñoz 负责任地报告给 Pivotal 的。特别感谢…

CVE-2015-3192 使用 XML 输入的拒绝服务攻击

| 2015 年 6 月 30 日 | CVE-2015-3192

描述

XML 外部实体之前已在发布http://pivotal.io/security/cve-2013-6429时禁用。如果 DTD 未完全禁用,则可以使用内联 DTD 声明执行称为 XML 炸弹的拒绝服务攻击。此类声明在 XML 模式规则下既格式良好又有效,但在解析时会导致内存不足错误。为了防止此类攻击,必须通过在 DOM 和 SAX API 中将disallow-doctype-dec功能设置为**true**以及在 StAX API 中将supportDTD属性设置为**false**来禁用 DTD 支持。

现在,在 Spring Framework 中默认情况下,在框架从外部源设置 XML 解析的任何地方都执行此操作。主要包括spring-oxm中的Unmarshaller实现和spring-web中的HttpMessageConverter实现。

请注意,应用程序可能需要采取进一步措施,尤其是在涉及 StAX 用法的情况下。例如,IBM JDK 1.6 和 1.7 除了设置 supportDTD=false 之外,还需要环境变量(请参阅 IBM JDK 参考)。此外,我们发现仅使用 supportDTD 无法防止使用 JDK JAXP 实现的所有类型的拒绝服务攻击。因此,我们建议使用Woodstox 开源库进行 StAX 解析。

以下描述了何时在 Spring Framework 中使用 StAX

  • SourceHttpMessageConverter - 默认启用。转换器是在 3.2 中添加的,而 StAX 支持是在 4.0.1 中添加的,并在转换为类型为javax.xml.transform.stax.StAXSource的 Spring MVC 控制器方法参数时使用。
  • Jaxb2CollectionHttpMessageConverter - 未默认启用。此转换器是在 3.2 中添加的。
  • MappingJackson2XmlHttpMessageConverter - 当类路径上存在“jackson-dataformat-xml”时启用。此转换器是在 4.1 中添加的。

受影响的 Spring 产品和版本

  • Spring Framework 3.2.0 到 3.2.13
  • Spring Framework 4.0.0 到 4.1.6
  • 其他不受支持的版本也受影响

缓解措施

受影响的 Spring Framework 版本的使用者应按如下方式升级

  • 对于 3.2.x,升级到<strong>3.2.14+</strong>
  • 对于 4.0.x 和 4.1.x,升级到<strong>4.1.7+</strong>

此外,通过 StAX 从外部来源使用 XML 输入的应用程序也应该使用和/或升级到 Woodstox 库的最新版本,例如 4.2+ 版本(4.2.1 是当前在 Spring IO 平台 中维护的版本)。

添加 Woodstox 的说明

StAX 定义了一种标准机制,用于在有多个 StAX 实现可用时选择使用哪个实现,包括系统属性和 WEB-INF/services 下的服务定义。Woodstox 包含必要的服务定义,因此只需将其添加到类路径中即可。但是,某些应用服务器(例如 WebLogic)已经捆绑了(旧版本的)Woodstox,在这种情况下,您可能需要配置服务器以优先使用应用程序选择的版本,请参阅此 关于 prefer-application-packages 的参考

鸣谢

NTT DATA Corporation 的 Maki Toshiaki 负责任地识别并向 Pivotal 报告了此问题,他还帮助开发和测试了解决方案。

参考

CVE-2015-0201 Java SockJS 客户端中会话 ID 随机性不足

| 2015 年 3 月 6 日 | CVE-2015-0201

描述

Java SockJS 客户端中的会话 ID 生成不够安全,可能允许用户向其他用户的会话发送消息。

请注意,这仅影响 Java SockJS 客户端的用户,该客户端会生成自己的会话 ID。即使浏览器客户端连接到同一服务器,也不会受到影响。

此外,由于 SockJS 是传输层,因此当在顶部使用更高级别的消息传递协议(例如使用 spring-messaging 模块通过 WebSocket 进行 STOMP)时,应用程序级别的安全性可能已经应用于 STOMP 消息,这可以抵消任何潜在攻击的影响。

受影响的 Spring 产品和版本

  • Spring Framework 4.1.0 至 4.1.4

缓解措施

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

  • 4.1.x 的用户应升级到 4.1.5 或更高版本

鸣谢

Philippe Arteau 发现了问题并负责任地向 Pivotal 报告了该问题。

参考

CVE-2014-3625 Spring Framework 中的目录遍历

中等 | 2014 年 11 月 11 日 | CVE-2014-3625

描述

某些 URL 在使用前未正确清理,允许攻击者获取文件系统上任何可访问 Spring Web 应用程序正在运行的进程的文件。

受影响的 Spring 产品和版本

  • Spring Framework 3.0.4 至 3.2.11
  • Spring Framework 4.0.0 至 4.0.7
  • Spring Framework 4.1.0 至 4.1.1
  • 其他不受支持的版本也可能受到影响

缓解措施

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

  • 3.2.x 的用户应升级到 3.2.12 或更高版本
  • 4.0.x 的用户应升级到 4.0.8 或更高版本
  • 4.1.x 的用户应升级到 4.1.2 或更高版本

鸣谢

NTT DATA Corporation 的 Maki Toshiaki 识别了此问题并负责任地向 Pivotal 报告了该问题。

参考

CVE-2014-3578 Spring Framework 中的目录遍历

中等 | 2014 年 9 月 5 日 | CVE-2014-3578

描述

某些 URL 在使用前未正确清理,允许攻击者获取文件系统上任何可访问 Spring Web 应用程序正在运行的进程的文件。

受影响的 Spring 产品和版本

  • 4.0.0 至 4.0.4
  • 3.2.0 至 3.2.8
  • 已知 3.1.1 受影响
  • 其他不受支持的版本也可能受到影响

缓解措施

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

  • 3.x 的用户应升级到 3.2.9 或更高版本
  • 4.x 的用户应升级到 4.0.5 或更高版本

鸣谢

此问题由 Mitsui Bussan Secure Directions, Inc. 的 Terada Takeshi 识别,并通过 JPCERT/CC 报告给 Pivotal。发现更多版本受到影响的信息……

CVE-2014-3527 Spring Security 中的访问控制绕过

| 2014 年 8 月 15 日 | CVE-2014-3527

描述

当使用 Spring Security 的 CAS 代理票据身份验证时,恶意 CAS 服务可能会欺骗另一个 CAS 服务对未关联的代理票据进行身份验证。这是因为代理票据身份验证使用来自 HttpServletRequest 的信息,而 HttpServletRequest 是根据 HTTP 请求中不受信任的信息填充的。

这意味着如果存在关于哪些 CAS 服务可以相互进行身份验证的访问控制限制,则可以绕过这些限制。

如果用户未使用 CAS 代理票据并且没有根据 CAS 服务做出访问控制决策,则用户不会受到影响。

受影响的 Spring 产品和版本

  • 3.1 至 3.2.4

缓解措施

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

  • 3.2x 的用户应升级到 3.2.5 或更高版本
  • 3.1.x 的用户应升级到 3.1.7 或更高版本

鸣谢

此问题由 David Ohsie 识别,并由 CAS 开发团队提请我们注意。

参考

CVE-2014-0225 使用 Spring MVC 时 XML 外部实体 (XXE) 注入

| 2014 年 5 月 28 日 | CVE-2014-0225

描述

在处理用户提供的 XML 文档时,Spring Framework 不会默认禁用 DTD 声明中 URI 引用的解析。这使得 XXE 攻击成为可能。

受影响的 Spring 产品和版本

  • Spring MVC 3.0.0 至 3.2.8
  • Spring MVC 4.0.0 至 4.0.4
  • 早期不受支持的版本也可能受到影响

缓解措施

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

  • 3.x 的用户应升级到 3.2.9 或更高版本
  • 4.x 的用户应升级到 4.0.5 或更高版本

鸣谢

此问题由 Nebula(XIAOBAISHAN、CHIBI、HUBEI.CN)HelloWorld 安全团队、DBappsecurity.com 安全团队发现并负责任地报告给 Pivotal 安全团队。此外……

CVE-2014-0054 CVE-2013-7315 / CVE-2013-6429 (XXE) 的修复不完整

| 2014 年 3 月 11 日 | CVE-2014-0054

描述

Spring MVC 的 Jaxb2RootElementHttpMessageConverter 也处理用户提供的 XML,既未禁用 XML 外部实体,也未提供禁用它们的选项。Jaxb2RootElementHttpMessageConverter 已修改为提供控制 XML 外部实体处理的选项,并且该处理现在默认已禁用。

受影响的 Spring 产品和版本

  • Spring MVC 3.0.0 至 3.2.7
  • Spring MVC 4.0.0 至 4.0.1
  • 早期不受支持的版本也可能受到影响

缓解措施

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

  • 3.x 的用户应升级到 3.2.8 或更高版本
  • 4.x 的用户应升级到 4.0.2 或更高版本

鸣谢

此问题由 Spase Markovski 报告给 Spring Framework 开发人员。

参考

领先一步

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

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部