领先一步
VMware 提供培训和认证,助您加速进步。
了解更多在发布 http://pivotal.io/security/cve-2013-6429 时,XML 外部实体已禁用。如果 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 解析。
以下描述了 StAX 在 Spring Framework 中的使用情况
SourceHttpMessageConverter — 默认启用。该转换器于 3.2 添加,StAX 支持于 4.0.1 添加,并在将 Spring MVC 控制器方法参数转换为 javax.xml.transform.stax.StAXSource 类型时使用。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,在这种情况下,您可能需要配置服务器以优先使用应用程序选择的 Woodstox,请参阅关于 prefer-application-packages 的参考资料。
此问题由 NTT DATA Corporation 的 Toshiaki Maki 负责任地发现并报告给 Pivotal,他还协助开发和测试了该解决方案。
2015-06-30:发布初步漏洞报告。
要报告 Spring 组合项目中存在的安全漏洞,请参阅安全策略