CVE-2015-5211 Spring Framework 中的 RFD 攻击
描述
在某些情况下,Spring Framework 容易受到反射文件下载 (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 攻击。Spring Framework 中的问题由 HPE Security Research 的 Alvaro Muñoz 负责任地报告给 Pivotal。特别感谢...