领先一步
VMware 提供培训和认证,以加快您的进步。
了解更多在发布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 Framework版本的使用者应按如下方式升级
此外,通过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日:发布初始漏洞报告。
要报告Spring产品组合中项目的安全漏洞,请参阅安全策略