特权升级:从访客到管理员

30 阅读3分钟

官网:http://securitytech.cc/

特权升级:从访客到管理员

当项目可见性被切换为“公开”后,访客用户可以升级为拥有完整项目访问权限

注意: 这篇 write-up 是一次漏洞挖掘报告,重点是 特权升级(Privilege Escalation)

喝杯咖啡准备好吧,如果你喜欢这篇文章别忘了点 50 个赞,感谢!


目标概览

目标是一个广泛使用的任务管理应用,提供 Web、移动端、桌面客户端和浏览器扩展。支持个人与团队工作区、共享项目以及基于链接的项目分享。

目标中的角色:

  1. Guest(访客):可以编辑项目内的任何内容,但不能移除他人。
    1. Admin(管理员):可以做任何操作,包括移除或编辑任何人。

(点击图片可放大查看)

开始 ⚔️

我的利用思路:

  1. 我创建一个团队工作区(包含创建项目)。
    1. 在该团队中创建用于写任务的项目。
    1. 我用第二个账户邀请自己,但以 Guest(访客) 身份加入。

(图片示意)

现在我有两个账号:

Owner = 主账号(受害者)

Guest = 攻击者

注意:在团队中,访客默认无法访问任何项目;必须由 Owner 先给他们项目访问权限。

  1. 在把第二个账号以访客邀请后,我发现项目可被切换为 公开(Public),此时工作区外的任何人都可以“查看”(只读)。

  1. 我选择将项目设置为 公开(Public),此时任何人在项目界面可以点击“复制链接(Copy Link)”并把该链接分享给团队外的人(他们只能查看,无法编辑或做其它操作)。

(图片示意)

  1. 等等,我有个想法:如果访客点击“复制链接”,复制后离开项目,然后打开该链接——他们能否重新以某种方式加入并获得权限?目标系统是否会再次检查角色,还是直接给他们完全权限?

我先试验场景一: 访客复制链接后以管理员身份(Admin)访问并将项目从 Public 改成 “团队中任何人都可编辑(Anyone in the team can edit)”。链接会过期吗?——结果是链接已经过期(不可用)。

接着我尝试第二种场景: 先以管理员身份把项目改成 Public;然后以访客身份复制该链接并离开项目,再打开该链接。你猜会怎样?是的,这个场景成功了:访客(攻击者)升级了权限,可以移除项目中的任意管理员或任意成员。

(图片示意)

(截图展示了请求与响应及操作过程)

访客可以移除管理员,服务器返回 200 => 所有者被移除。


重现步骤(Steps)

  1. 创建一个团队工作区(用于创建项目)。
    1. 在团队中创建一个项目来写任务。
    1. 用第二个账号以 GUEST(访客) 身份被邀请加入。
    1. 以 Admin 身份将项目改为 Public(公开)
    1. 以 Guest 身份点击“复制链接(Copy link)”。
    1. 攻击者离开该项目并打开刚才复制的公开项目链接。
    1. 目标系统会赋予其完全权限(编辑、移除任意人)。

结束。


结果(The Results)

目标在判断权限时并未正确验证该用户是否仍在团队中。因此攻击者能够通过上述流程升级角色,获得对项目的完整访问权限(包括编辑与移除成员)。

(动图示意)

公众号:安全狗的自我修养

vx:2207344074

Gitee:gitee.com/haidragon

GitHub:github.com/haidragon

Bilibili:haidragonx