Spring 安全公告

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

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

描述

在发布http://pivotal.io/security/cve-2013-6429之后,XML外部实体已被禁用。如果DTD没有完全禁用,则可以使用内联DTD声明来执行称为XML炸弹的拒绝服务攻击。根据XML模式规则,此类声明既格式良好又有效,但在解析时可能会导致内存不足错误。为了防止此类攻击,必须通过将disallow-doctype-decl功能在DOM和SAX API中设置为**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实现的所有类型的DoS攻击。因此,我们建议使用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,升级到**3.2.14+**
  • 对于4.0.x和4.1.x,升级到**4.1.7+**

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

关于添加Woodstox的说明

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

致谢

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

参考资料

历史

2015年6月30日:发布初始漏洞报告。

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看全部