官网:http://securitytech.cc/
特权升级:从访客到管理员
当项目可见性被切换为“公开”后,访客用户可以升级为拥有完整项目访问权限
注意: 这篇 write-up 是一次漏洞挖掘报告,重点是 特权升级(Privilege Escalation)。
喝杯咖啡准备好吧,如果你喜欢这篇文章别忘了点 50 个赞,感谢!
目标概览
目标是一个广泛使用的任务管理应用,提供 Web、移动端、桌面客户端和浏览器扩展。支持个人与团队工作区、共享项目以及基于链接的项目分享。
目标中的角色:
- Guest(访客):可以编辑项目内的任何内容,但不能移除他人。
-
- Admin(管理员):可以做任何操作,包括移除或编辑任何人。
(点击图片可放大查看)

开始 ⚔️
我的利用思路:
- 我创建一个团队工作区(包含创建项目)。
-
- 在该团队中创建用于写任务的项目。
-
- 我用第二个账户邀请自己,但以 Guest(访客) 身份加入。
(图片示意)

现在我有两个账号:
Owner = 主账号(受害者)
Guest = 攻击者
注意:在团队中,访客默认无法访问任何项目;必须由 Owner 先给他们项目访问权限。
- 在把第二个账号以访客邀请后,我发现项目可被切换为 公开(Public),此时工作区外的任何人都可以“查看”(只读)。

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

- 等等,我有个想法:如果访客点击“复制链接”,复制后离开项目,然后打开该链接——他们能否重新以某种方式加入并获得权限?目标系统是否会再次检查角色,还是直接给他们完全权限?
我先试验场景一: 访客复制链接后以管理员身份(Admin)访问并将项目从 Public 改成 “团队中任何人都可编辑(Anyone in the team can edit)”。链接会过期吗?——结果是链接已经过期(不可用)。

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

(截图展示了请求与响应及操作过程)
访客可以移除管理员,服务器返回 200 => 所有者被移除。
重现步骤(Steps)
- 创建一个团队工作区(用于创建项目)。
-
- 在团队中创建一个项目来写任务。
-
- 用第二个账号以 GUEST(访客) 身份被邀请加入。
-
- 以 Admin 身份将项目改为 Public(公开)。
-
- 以 Guest 身份点击“复制链接(Copy link)”。
-
- 攻击者离开该项目并打开刚才复制的公开项目链接。
-
- 目标系统会赋予其完全权限(编辑、移除任意人)。

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