BladeX-User提权漏洞

Bug 未结 3 2824
IceSun
IceSun 剑童 2020-07-02 17:15

一、该问题的重现步骤是什么?

  1.    非超管000000租户创建用户, 调用接口时tenantId置空, 接口不报错, 但是在接口调用过程中

    image.png

    blade会主动置tenantId为000000, 

2. 如果roleId再置为超管权限的roleId, 则直接可以获得一个拥有超管权限的用户

3. 该bug相当于低层租户拥有了提权的能力, 造成损失的话不可估量


二、你期待的结果是什么?实际看到的又是什么?


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

BladeX-2.5.0.RELEASE

Win10x64开发环境, Centos测试和线上环境

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

3条回答
  • 2022-09-29 17:03

    我认为触发者如果不是来自000000租户中的管理员,要将租户号码设置成jwt token中的租户号码,除非是000000的租户的管理员可以创建其他租户的用户,如下是我解决这个问题的方法

    image.png

    2 讨论(0)
  • 2023-12-20 00:07

    第二点 别人是很有可能知道超管的roleId的,因为正常情况下数据库导入后没人会去变更主键,通过开源的数据库脚本即可拿到


    我认为非超管用户 通过置空tenantId,后台又默认为000000还是非常危险的

    作者追问:2023-12-20 00:13

    image.png

    1 讨论(0)
  •  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邮箱注册后发帖

    0 讨论(0)
提交回复