BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

利用OAuth劫持用户身份

| 作者 郭蕾 关注 8 他的粉丝 发布于 2014年8月28日. 估计阅读时间: 5 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

本文基于@蓝色di雪球在2014年8月22日的KCon上的演讲《利用OAuth劫持用户身份》整理而成。

演讲者简介

@蓝色di雪球,新浪微博安全团队安全工程师。主要从事微博产品的安全测试,安全功能架构,以及相关自动化平台工具架构和研发工作。致力于研究应用安全,安全自动化以及安全运维等。

OAuth是什么

OAuth是一个开源授权协议,通过授权,第三方应用可以在不使用用户名密码的情况下,访问用户在某一个网站上的私密数据。目前微博、淘宝、微信、Twitter、Facebook等用户基数比较大的公司都在使用OAuth,从谷歌的搜索结果也可以看到OAuth的发展很快,使用的人非常多。OAuth分为OAuth 1.0和OAuth 2.0,OAuth 2.0简单清晰,是1.0的升级版,但是不兼容1.0,目前大多数网站也都是使用的OAuth 2.0。

OAuth的四种调用方式

  1. Authorization Code
    最常用的,相对安全,需要有Server端支持。
  2. Implicit
    直接获取access_token,不需要Server端支持。
  3. Resource Owner Password Credentrals
    第三方可以获得用户名和密码,需要第三方绝对可信。
  4. Client Credentials
    不需要用户授权,授权通过服务器进行。

请求参数

在了解OAuth的漏洞之前,首先需要了解常用的OAuth调用方式的请求参数。

  1. Authorization Code
    • https(加密传输)
    • response_type=code(控制调用)
    • redirect_uri(回掉地址)
    • scope(控制权限)
  2. Implicit
    • display(场景控制)
    • response_type=token(控制调用)
    • referer(请求来源)
    • 没有redirect_uri

OAuth风险分析

风险分析

  • 信息泄漏
    主要包括Authorization Code泄漏、Access Token泄漏、AppSecret泄漏。
  • CSRF
    主要包括授权劫持和绑定劫持。授权劫持是指用户在目标网站处于登录状态的情况下,攻击者通过伪造授权链接来诱骗用户点击,用户访问攻击者的链接后,攻击者就会劫持用户授权。绑定授权同样是在用户处于登录状态的情况下,攻击者通过用户授权登录目标网站并阻断用户授权流程,进而诱骗用户点击,用户在访问攻击者的链接后,攻击者就可以劫持用户授权。
  • URL回调污染
    主要是指由于redirect_uri回调地址填写不严格或者授权服务器不验证或者验证不严格而导致的code或者access_token泄露。

  • 权限认证
    主要是指OAuth高级授权接口的越权访问,比如GitHub的scope漏洞,导致可以访问私有代码区。

  • 不区分调用方式
    主要是指在Authorization Code和Implicit两个调用方式,它们的区别仅仅是一个参数,黑客可以利用这个参数来绕过AppSecret认证。

如何优雅的利用OAuth漏洞

  1. 劫持用户应用方身份
    这种方式需要用户绑定第三方应用和网站进行授权绑定,黑客修改回调地址后,紧接着用户就会跳转到接受code的网址,黑客获得code后就可以登录与网站绑定的第三方账号。具体的攻击过程是这样的:1)用户授权将网站与第三方应用绑定 2)用户已经登录网站 3)黑客构造OAuth回调污染地址 4)通过私信等其它途径诱惑用户点击URL 5)利用Authorization Code劫持用户第三方应用的身份

  2. 劫持用户授权方身份
    黑客利用OAuth中的URL跳转漏洞,XSS漏洞后拿到accesss_token。通过access_token,黑客可以劫持大V用户发微博、劫持大量用户发评论、删除指定微博、刷粉、强制关注等。

OAuth漏洞修复

微博中存在的问题:

  • 开放平台中 redirect_uri 不规范
  • redirect_uri 校验存在逻辑错误
  • 不区分调用方式

最终的修复方案:

  • 将大型应用添加进白名单,严格验证开放平台回调地址
  • 非白名单进行全路径验证
  • 运营和产品推动,规范白名单内应用的回调地址,改完移出白名单,直到白名单清空

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

bug? by 柳 径

Implicit grant的response_type=token才对吧,redirect_uri也有的吧。
顺便分享,
access_toke确实可能被脚本注入利用,尤其是Implicit grant + user agent(比如将access_toke放在回调url的hash内),不使用https的话也可能在中间环节被截获,所以一般会限制有效时间或者有效访问次数降低风险,尤其针对增删改API更要重点限制。
URL回调污染还有Scope漏洞的话纯属服务方问题,校验没做到位,不是协议本身的问题。

Re: bug? by Guo Gary

嗯,是的,应该是Token,已经和作者确认,谢谢您的分享。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT