若依4.5.0-4.5.1任意文件下载漏洞
根据官方给出的信息,漏洞的位置为ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
fileDownload方法

该方法使用了FileUtils的isValidFilename方法对fileName变量进行处理。跟进

isValidFilename方法获取filename变量,再使用FILENAME_PATTERN进行处理。

可以看到对filename变量进行了正则处理,但是未对路径穿越做限制。漏洞存在
那么是怎么修复的呢?接着看4.5.1版本
把函数由isValidFilename替换成了checkAllowDownload,跟进。


用if判断对路径穿越进行了处理。
对文件规则进行检查。首先看一下contains的作用
contains():检查该数据在该数组中是否存在,返回一个boolean值。
接着使用DEFAULT_ALLOWED_EXTENSION进行文件后缀的检查

最后调用了getFileType对文件名进行检查
lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。
toLowerCase() 方法将字符串转换为小写。

4.5.1新增了几个方法:
FileUtils.checkAllowDownload方法、checkAllowDownload方法
FileTypeUtils类:getFileType(Filefile)、getFileType(StringfileName)

浙公网安备 33010602011771号