zoukankan      html  css  js  c++  java
  • oauth认证中容易被错误使用而导致的漏洞

    没有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常见的其他被错误使用导致的漏洞,可以好好看看)

  • 相关阅读:
    GitHub Android Libraries Top 100 简介
    GitHub Top 100 的项目(iOS)
    iOS 学习资源
    HTTP和GET/POST请求(NSURLConnection)
    RunLoop
    HTML5 拖放
    网络安全与加密
    Cocoapods的安装
    iOS中的单例模式
    SDWebImage
  • 原文地址:https://www.cnblogs.com/virusdefender/p/3753433.html
Copyright © 2011-2022 走看看