CVE-2020-5398:Spring MVC 或 Spring WebFlux 应用程序通过源自请求输入的“Content-Disposition”头导致的反射文件下载 (RFD) 攻击
描述
在使用 Spring Framework 的应用程序中,版本 5.2.x 在 5.2.3 之前、版本 5.1.x 在 5.1.13 之前以及版本 5.0.x 在 5.0.16 之前,当在响应中设置了“Content-Disposition”头,并且其 filename 属性来源于用户提供输入时,应用程序易受到反射文件下载 (RFD) 攻击。
具体来说,当以下所有条件都满足时,应用程序是脆弱的
- 该头是通过 org.springframework.http.ContentDisposition 构建的。
- 文件名通过以下方法之一设置
- ContentDisposition.Builder#filename(String),或
- ContentDisposition.Builder#filename(String, US_ASCII)
- 文件名的值来源于用户提供的输入。
- 用户提供的输入未被应用程序净化。
- 下载的响应内容被攻击者注入恶意命令(详情参见 RFD 论文参考)。
如果以下任何条件满足,则应用程序不脆弱
- 应用程序未设置“Content-Disposition”响应头。
- 该头不是通过 org.springframework.http.ContentDisposition 构建的。
- 文件名通过以下方法之一设置
- ContentDisposition.Builder#filename(String, UTF_8),或
- ContentDisposition.Builder#filename(String, ISO_8859_1)
- 文件名不来源于用户提供的输入。
- 文件名来源于用户提供的输入,但已被应用程序净化。
受影响的 Spring 产品和版本
- Spring Framework
- 5.2.0 到 5.2.2
- 5.1.0 到 5.1.12
- 5.0.0 到 5.0.15
缓解措施
受影响版本的用户应采取以下缓解措施。5.2.x 用户应升级到 5.2.3。 5.1.x 用户应升级到 5.1.13。 5.0.x 用户应升级到 5.0.16。 无需采取其他步骤。 已修复此问题的版本包括
- Spring Framework
- 5.2.3
- 5.1.13
- 5.0.16
鸣谢
此问题由 EPAM 的 Roman Shalymov 发现并负责任地报告。