未经许可,不得转载。
文章目录
- 背景
- 正文
- 设置竞态条件
- 实现漏洞
背景
目标应用允许用户创建项目。这些项目中包含多个用户角色,每个角色权限不同(如所有者、管理员、成员管理者等)。用户可通过接受邀请来加入项目,而只有项目所有者才能通过输入邮箱将项目所有权转移给其他用户。这是你需要了解的所有背景信息。
正文
在探索应用时,我发现了两种转移项目所有权的方式:
1、目标用户A尚未加入项目,向A转移项目所有权时,会发送邀请,用户A接受邀请后才能获得项目所有权。
2、目标用户A已经是该项目成员时,所有权会立即转移到A。
很有意思,对吧?但该如何利用这种行为呢?毕竟,只有项目所有者才能发起转移操作。
在测试过程中,我注意到以下几点:
1、可以通过拦截编辑成员权限的请求,并在请求体中添加 email 参数,来修改待定邀请用户的邮箱。
2、已激活用户的邮箱:在任何情况下都无法修改。
待定用户的邮箱究竟在什么时候变得不可更改?是在点击邀请链接后?还是注册完成后?亦或是在登录并接受邀请后?
通过大量测试和账户创建,我发现了转折点: