声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 |
背景介绍:
今天的故事来自国外一位ID为Abhinav Gaur的白帽子,他因为发现该漏洞而获得了$2000的赏金奖励。
为了目标网站的安全,特将目标网站的域名使用“redacted.com”来代替,目标网站主要涉及教育和认证行业,于是,这位白帽子将目标定位在了IOS应用。
漏洞发现:
这位白帽小哥注意到IOS应用程序允许用户使用社交账号(诸如Facebook、Google、Apple 等账号)登录或创建帐户。
于是白帽小哥开始测试应用程序的 Oauth 流程,他主要关注的是 使用Facebook 账号登录。
在进行测试的过程中,白帽小哥注意到应用程序信任从 Facebook 收到的数据,这些数据包括姓名、电子邮件、出生日期等。
此时,一个想法突然出现在小哥的脑海中:
如果这个社交账号是用手机号码注册会怎样?
应用程序是否会要求用户提供电子邮件地址?因为它并没有通过 Facebook 来接收数据。
结果与和白帽小哥所想的一模一样!
于是小哥通过 Facebook 来注册应用程序,而Facebook 的帐户则是使用手机号码创建的,因为应用程序无法检索到用户的电子邮件,于是便会弹出一个对话框提示用户输入电子邮件:
在这个对话框中,小哥填写了一个受害者的电子邮件地址,通过数据抓包可以看到:
POST /oauth2/v1/token HTTP/1.1
Host: redacted.com
Accept: */*
X-RedactedMobile-UDID: redacted
X-redacted-Device-Token: redacted
X-redacted-Mobile-Signature: redacted
Accept-Language: en
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 446
User-Agent: redacted-Mobile-iOS-iPhone/3.20.1-25355/14.2
Connection: close
Cookie: redacted
auth_type=facebook&[email protected]&client_id=redacted&client_secret=redacted&grant_type=thirdparty&nonce=redacted×tamp=redacted&token=redacted
从上面的抓包请求中可以看到 backup_email 这个参数很容易受到攻击,攻击者可以在此参数中提供受害者的电子邮件地址,从而直接登录到受害者的帐户中。
而该漏洞产生的主要原因是应用程序未将社交登录帐户的电子邮件与已注册用户的电子邮件地址进行交叉检查。
于是白帽小哥第一时间报告了这个漏洞,最终漏洞被归为严重级,并最终获得了2000美元的漏洞赏金奖励。
====正文结束====
原文始发于微信公众号(骨哥说事):一个价值$2000的“零点击”账号劫持漏洞