CVE-2015-5211 Spring 框架中的 RFD 攻击

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

描述

在某些情况下,Spring 框架容易受到反射型文件下载 (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 攻击。Pivotal 由 HPE 安全研究部的 Alvaro Muñoz 负责任地报告了 Spring 框架中的此问题。特别感谢 NTT DATA Corporation 的 Toshiaki Maki 和 Tomoyuki Ikeya 帮助验证解决方案并识别了利用此漏洞的其他方法。

参考资料

历史

2015 年 10 月 15 日:发布初始漏洞报告。

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

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

查看所有