若依前后端分离版本 v3.2.1 已发布,更新日志:
RuoYi <= v3.2.0
任意文件下载漏洞,正常的利用手段是下载服务器文件,如脚本代码,服务器配置或者是系统配置等等。可以利用../来逐层猜测路径。
../
网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。
检测漏洞:CommonController.java,/common/download/resource接口是否包含checkAllowDownload用于检查文件是否可下载,如果没有此方法需要修改,防止被下载关键信息。
CommonController.java
/common/download/resource
checkAllowDownload
解决方案:升级RuoYi版本到 >=3.2.1,或者重新添文件下载检查,防止任意文件下载。
RuoYi
>=3.2.1
/** * 本地资源通用下载 */ @GetMapping("/common/download/resource") public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) throws Exception { try { if (!FileUtils.checkAllowDownload(resource)) { throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource)); } // 本地资源路径 String localPath = Global.getProfile(); // 数据库资源地址 String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); // 下载名称 String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, downloadName); FileUtils.writeBytes(downloadPath, response.getOutputStream()); } catch (Exception e) { log.error("下载文件失败", e); } } /** * 检查文件是否可下载 * * @param resource 需要下载的文件 * @return true 正常 false 非法 */ public static boolean checkAllowDownload(String resource) { // 禁止目录上跳级别 if (StringUtils.contains(resource, "..")) { return false; } // 检查允许下载的文件规则 if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) { return true; } // 不在允许下载的文件规则 return false; }
基于SpringBoot + Vue的前后端分离权限管理系统。
下载地址RuoYi-Vue
如需不分离应用,请移步 RuoYi (保持同步更新),如需其他版本,请移步 项目扩展 (不定时更新)
(保持同步更新)
(不定时更新)
演示地址:http://vue.ruoyi.vip
文档地址:http://doc.ruoyi.vip
评论删除后,数据将无法恢复
RuoYi-Vue 3.2.1 发布,阻止任意文件下载漏洞
若依前后端分离版本 v3.2.1 已发布,更新日志:
RuoYi <= v3.2.0任意文件下载漏洞,正常的利用手段是下载服务器文件,如脚本代码,服务器配置或者是系统配置等等。可以利用
../来逐层猜测路径。网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。
检测漏洞:
CommonController.java,/common/download/resource接口是否包含checkAllowDownload用于检查文件是否可下载,如果没有此方法需要修改,防止被下载关键信息。解决方案:升级
RuoYi版本到>=3.2.1,或者重新添文件下载检查,防止任意文件下载。基于SpringBoot + Vue的前后端分离权限管理系统。
下载地址RuoYi-Vue
内置功能
在线体验
演示地址:http://vue.ruoyi.vip
文档地址:http://doc.ruoyi.vip
演示图