一、该问题的重现步骤是什么?
非超管000000租户创建用户, 调用接口时tenantId置空, 接口不报错, 但是在接口调用过程中
blade会主动置tenantId为000000,
2. 如果roleId再置为超管权限的roleId, 则直接可以获得一个拥有超管权限的用户
3. 该bug相当于低层租户拥有了提权的能力, 造成损失的话不可估量
二、你期待的结果是什么?实际看到的又是什么?
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
BladeX-2.5.0.RELEASE
Win10x64开发环境, Centos测试和线上环境
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
我认为触发者如果不是来自000000租户中的管理员,要将租户号码设置成jwt token中的租户号码,除非是000000的租户的管理员可以创建其他租户的用户,如下是我解决这个问题的方法
第二点 别人是很有可能知道超管的roleId的,因为正常情况下数据库导入后没人会去变更主键,通过开源的数据库脚本即可拿到
我认为非超管用户 通过置空tenantId,后台又默认为000000还是非常危险的
1. 因为有前端关闭租户模式的开关,所以关闭后,创建用户就没有tenantId了,自然是需要各一个默认的租户编号去处。000000租户不具有超管的权限,只是一个默认分组,你创建一个user角色,分配到000000租户,这个角色也不会有任何的权限新增出来。
2. 因为当前登录用户不知道超管的roleId是多少,所以无法准确自行设置超管的roleId,在web界面也无法选择到超管角色。
3. 非超管账号在创建角色的时候,无法创建超管角色,这个是程序底层判断的,所以也不能通过自己创建角色的办法来提权改成超管角色。
4. 如果你一定要说知道了超管的roleId,然后不通过web操作,使用类似postman的工具来操作,的确有可能,不过要满足如下几个条件:知道租户管理员的账号密码,知道超管的roleId,拿到了token再进行调用。
5. 但我觉得这样和U盾密码都给别人,让人取走了钱说银行不安全是一个道理
另外,商业版答疑规则见:https://sns.bladex.cn/article-14990.html
请使用下单购买授权的qq邮箱注册后发帖
扫一扫访问 Blade技术社区 移动端