写点什么

利用 OAuth 劫持用户身份

2014 年 8 月 27 日

本文基于 @蓝色 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(控制权限)
  1. 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 校验存在逻辑错误
  • 不区分调用方式

最终的修复方案:

  • 将大型应用添加进白名单,严格验证开放平台回调地址
  • 非白名单进行全路径验证
  • 运营和产品推动,规范白名单内应用的回调地址,改完移出白名单,直到白名单清空
2014 年 8 月 27 日 04:082681
用户头像
郭蕾 做有意思的事情!

发布了 210 篇内容, 共 109.5 次阅读, 收获喜欢 30 次。

关注

评论

发布
暂无评论
发现更多内容

二层交换机和三层交换机之间VLAN的区别

GitHub标星17K,超火的SpringBoot +Vue实战项目,文档视频贼全

Java成神之路

Java 程序员 架构 面试 编程语言

Alibaba Java面试题大揭秘,把这些知识点吃透去面试成功率高达100%

Java架构之路

Java 程序员 架构 面试 编程语言

4项探索+4项实践,带你了解华为云视觉预训练研发技术

华为云开发者社区

AI 华为云 modelarts

话题讨论 | 对于懂得编程的人来说,编程对你来说有什么乐趣?编程大概是什么感觉?

xcbeyond

话题讨论

阿里P8大牛的建议,工作1-5年的Java工程师如何让自己变得更值钱

Java成神之路

Java 程序员 架构 面试 编程语言

小熊派开发实践丨小熊派+合宙Cat.1接入云服务器

华为云开发者社区

IoT 小熊派 实践

LeetCode题解:45. 跳跃游戏 II,贪心从后向前,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

话题讨论 | 聊聊那些年你重构过的代码?

xcbeyond

话题讨论

Norns.Urd 中的一些设计

八苦-瞿昙

C# 随笔 随笔杂谈 aop

一个优秀的程序员,不仅要会编写程序,更要会编写高质量的程序

Java成神之路

Java 程序员 架构 面试 编程语言

六度空间软件系统开发|六度空间APP开发

开發I852946OIIO

系统开发

某Javva程序员金秋9月靠这份文档涨薪10K,你把这份Java进阶文档吃透涨薪超简单!

Java架构之路

Java 程序员 架构 面试 编程语言

金九银十Android热点知识!架构师花费近一年时间整理出来的安卓核心知识,送大厂面经一份!

欢喜学安卓

程序员 面试 编程开发 Android进阶 Android开发

测试右移之日志收集与监控

BY林子

敏捷 软件测试

架构师训练营 1 期 -- 第十二周总结

曾彪彪

极客大学架构师训练营

足不出户带你体验专业实验室,技术实现不在话下

华为云开发者社区

体验 平台 实验

中国SaaS的病与痛?

ToB行业头条

Flutter技术在会展云中大显身手

京东科技开发者

flutter 跨平台 移动开发

可以秒杀全场的SpringCloud微服务电商实战项目,文档贼全

Java成神之路

Java 程序员 架构 面试 编程语言

安卓开发不得不会!啃下这些Framework技术笔记,成功入职阿里

欢喜学安卓

android 程序员 编程开发 Android进阶

架构师训练营第一期 - 第十一周学习总结

卖猪肉的大叔

极客大学架构师训练营

linux命令:查询占用端口文件所在位置

梁小航航

Linux

在阿里巴巴内网找到的一份《Java核心宝典》简直太细了,如获至宝!

Java架构之路

Java 程序员 架构 面试 编程语言

LeetCode题解:102. 二叉树的层序遍历,BFS,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

C++typename的由来和用法

良知犹存

c++

MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒

Java成神之路

Java 程序员 架构 面试 编程语言

刷完这两份pdf轻松拿下了蚂蚁金服、头条、小米等大厂的offer。

Java架构之路

Java 程序员 架构 面试 编程语言

卧槽,牛皮了!某程序员苦刷这两份算法PDF47天,四面字节斩获心仪大厂offer!

Java架构之路

Java 程序员 架构 面试 编程语言

华为工程师:扔掉你手里的其他Netty资料吧,有这份足以

小Q

Java 学习 面试 Netty 网络

不为人知的网络编程(十):深入操作系统,从内核理解网络包的接收过程(Linux篇)

JackJiang

Linux 网络编程 TCP/IP

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

利用OAuth劫持用户身份-InfoQ