您的位置:首页 > 其它

oauth认证中容易被错误使用而导致的漏洞

2014-05-26 16:56 239 查看
没有state参数导致的csrf,被别人绑定账号

我们知道oauth授权的大致流程是这样的

提供一个登录按钮 url大致是这样的
https://api.weibo.com/oauth2/authorize?【client_id】=【2857799177】&【redirect_uri】=【https://sae.sina.com.cn/ssl/?m=sso&a=weibo_callback&sccb=http%3A%2F%2Fsae.sina.com.cn%2F%3Fm%3Duser%26a%3Dreg_check_login】&【response_type】=【code】&【forcelogin】=【true】
这里对url立面的参数和值使用【】区分了。其中重要的部分是client_id和redirect_uri,如果用户同意授权并登录之后,后台会记录client_id,生成一个code,然后重定向到那个redirect_uri,然后携带code,比如http://sae.sina.com/?【code】=【fldjs8943fasoh】

这样第三方应用就获取到了code,然后根据事先注册的client_id和app_secret就能去获取access_token之类的信息了。然后凭借access_token去访问用户信息。

但是我们想如果两个人交换了这个code,那样不就会绑定了对方的账号么?因为这个code或者这个带有code的url只能携带提供oauth服务的网站的账号,比如微博账号,然后绑定在第三方(比如论坛)上,只要是没有论坛账号没有绑定微博账号的人,访问带有这个code的url,都会将这个微博账号绑定在论坛账号上。

怎么防范呢,其实在oauth官方文档中有说明,就是再加入一个随机参数,比如state=3428oiresuihf,服务器访问回调url的时候也会带着这个参数,比如http://sae.sina.com/?code=fdsfjkldsfjdlks&state=fdsafjdsklw9 第三方应用需要自行去设置和对比这个参数,比如在session中存储等等。

但是要强调的是:不是必须加入state参数,而是必须用csrf保护。参考http://drops.wooyun.org/papers/598中间部分。

redirect_uri校验不严格

这样就网站可能就会将code重定向到攻击者的网址上,然后我们使用这个code填到真实的redirect uri上就能绑定账号了。

主要问题就是url没有校验,url校验不严,可绕过,url跳转漏洞等等。参考
http://blog.knownsec.com/2014/05/oauth_vulnerability_analysis/
错误的参数传递

比如用户同意授权之后重定向的时候会携带uid,然后将账号绑定在这个uid上,却没有校验uid。

参考http://www.wooyun.org/bugs/wooyun-2012-011104
http://www.wooyun.org/bugs/wooyun-2013-017543
------------------------

参考 http://www.freebuf.com/articles/web/5997.html http://tech.ccidnet.com/art/32963/20121109/4448657_1.html http://drops.wooyun.org/papers/1989(这个里面还有oauth常见的其他被错误使用导致的漏洞,可以好好看看)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐