本文讲述的漏洞涉及Facebook的办公通讯应用Workplace,攻击者只需知晓用户ID即能通过存在漏洞的服务端获取到其绑定的注册邮箱。漏洞在于Workplace某个使用一次性密码(one-time nonce )执行用户登录的服务端,其在登录流程中对过期的一次性密码处理不当,导致后续跳转的URL路径中会包含用户的注册邮箱。以下是作者的发现过程,一起来看看。
漏洞情况
近期,Facebook的办公通讯应用Workplace引入了一项新的用户登录机制,用户只需输入绑定的注册邮箱,即会在邮箱中收到Workplace发来的一次性登录链接。用户点击该链接后,会携带用户ID和随机生成的一次性密码(one-time nonce )跳转到一个登录服务端。然而,经我测试发现,在该登录服务端中,若一次性登录链接中随机生成的一次性密码(one-time nonce )是过期状态,则点击该一次性登录链接后会,其后续跳转的URL路径中会返回用户的绑定注册邮箱。(Workplace生成的一次性登录链接中包含了用户ID)
分析来看,该登录流程中可能存在不安全的直接对象引用(IDOR)漏洞,即攻击者可以更改其中的用户ID就能轻松地获取到对应用户的绑定注册邮箱。问题原因主要是缺乏必要的权限限制,可从以下两方面作出改进:
1、需要对一次性密码(one-time nonce )的状态做出明确的提示。这里当一次性密码是过期状态时,服务端的登录逻辑是在跳转URL中返回对应用户ID的用户邮箱,以便向用户邮箱重新发送另一个一次性登录链接。而整个流程中却缺乏对一次性密码状态的检查机制;
2、可以在该登录流程中添加一个参数来完善,可在该参数中以HASH形式请求后端,形成对参数名值的安全校验,同时这样也可避免同一个用户生成多个登录nonce,造成混淆。
漏洞复现
1、访问https://TARGET.workplace.com/;
2、在其中的邮箱登录区域输入任意邮箱地址;
3、用Burp对上述过程抓包,发现其对应的POST请求路径为/work/landing/do/new/;
4、更改POST请求路径为/work/signin/magic_link/login/,并在其请求内容中添加字段:
body nonce=RANDOM&uid=TARGET_ID&request_id=RANDOM,其中TARGET_ID为Workplace用户的用户ID,RANDOM为任意字符;
5、POST请求发出后,服务端在返回的响应内容中就包含了对应用户ID的绑定邮箱。
漏洞危害
该漏洞可造成的危害是,如果攻击者知晓Workplace受害者用户的用户ID,就可利用该方法获取到其注册的绑定邮箱。整个漏洞利用过程非常简单,攻击者可对特定用户形成信息获取,且若对用户ID形成字典式的积累,也能利用该漏洞批量式地枚举获取大量用户注册邮箱。
漏洞上报和处理进程
2020.11.26 漏洞上报
2020.11.27 Facebook确认漏洞有效性
2020.12.9 Facebook修复漏洞
2020.12.14 Facebook给出了$5K的奖励
参考来源:ysamm,编译整理:clouds,转载请注明来自Freebuf.com
来源:freebuf.com 2021-01-07 16:48:14 by: clouds
请登录后发表评论
注册