领先一步
VMware 提供培训和认证,助您快速提升。
了解更多XML 外部实体在发布 http://pivotal.io/security/cve-2013-6429 时已禁用。如果 DTD 未完全禁用,则可以使用内联 DTD 声明进行拒绝服务攻击,即所谓的 XML 炸弹。根据 XML 模式规则,此类声明格式良好且有效,但解析时可能导致内存不足错误。为防御此类攻击,必须通过在 DOM 和 SAX API 中将 disallow-doctype-dec 特性设置为 true,并在 StAX API 中将 supportDTD 属性设置为 false 来禁用 DTD 支持。
现在,只要框架从外部源设置 XML 解析,Spring Framework 就会默认执行此操作。主要包括 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 下的服务定义。Woodstox 包含了必要的服务定义,因此简单地将其添加到类路径中应该就可以工作。然而,某些应用服务器(如 WebLogic)已经捆绑了 Woodstox 的(旧版本),在这种情况下,您可能需要配置服务器以优先使用应用程序选择的版本,请参阅此 关于 prefer-application-packages 的参考。
该问题由 NTT DATA Corporation 的 Toshiaki Maki 负责任地发现并报告给 Pivotal,他也协助开发和测试了解决方案。
2015 年 6 月 30 日:首次发布漏洞报告。
要报告 Spring 组合项目中存在的安全漏洞,请参阅安全政策