通俗地理解OAuth2.0的授权码模式

0x0、理解完整流程

第一步:用户点击登录《OAuth2.0的授权思路总结》

 

第二步:用户根据第一步的指引访问第三方平台(统一登录中心)

《OAuth2.0的授权思路总结》

第三步:验证用户名密码的准备

《OAuth2.0的授权思路总结》

第四步:验证用户名密码

《OAuth2.0的授权思路总结》

 

验证成功后的跳转指引(一般会有一个授权过程,需要用户点击确认才可以到达这里,但是在这个实例里面没有,需要注意!)

《OAuth2.0的授权思路总结》

第五步:带着验证成功的身份信息请求code。

《OAuth2.0的授权思路总结》

第六步:带着code去访问应用

《OAuth2.0的授权思路总结》

第七步:通过code换token

《OAuth2.0的授权思路总结》

0x1、可能的安全问题

  • 第二步中,可能通过修改redirect_uri实现任意url跳转,从而实现token的窃取。client_id和redirect_uri都应该是在开发者平台注册的时候确定,并绑定关系的 。如果注册的时候就通过通配符来填充子域名,将可能造成这个问题
2010-11-03 WooYun: Sina 微博OAuth 提供者存在session fixation attack漏洞
2011-02-18 WooYun: 新浪微博应用URL跳转
2011-04-29 WooYun: 街旁网第三方登录劫持漏洞
2013-07-01 WooYun: 图虫网第三方认证缺陷导致可以劫持帐号
2013-07-23 WooYun: 团800oauth缺陷可能导用户帐号被劫持

 

  • client_id(appkey)和client_secret(app secret)泄露
  • 平台方提供的接口存在XSS
  • 平台方授权页面的csrf
2012-02-15 WooYun: CSRF导致微博应用自动授权
2012-07-20 WooYun: 第三方APP强制新浪用户OAUTH授权漏洞
2012-12-03 WooYun: 网易开放平台第三方应用oauth强制用户授权漏洞
  • 流程漏洞,可忽略前面步骤,类似密码重置逻辑漏洞,UID修改
2013-02-19 WooYun: 猪八戒网不用账号密码登录任意账号
2013-03-18 WooYun: 饭统网登录任意账户漏洞使用了Oauth后导致的跨应用登录问题(OAuth 2.0无绑定token问题)
  • 通过一系列,登录授权后,获取到一个代表用户身份的code–access_token–或者UID. 如果能找到这个参数的规律,能进行修改或者替换,那么将导致任意用户登录。
WooYun: 金山快盘手机客户端任意进入他人快盘账号
金山快盘手机客户端任意进入他人快盘账号.pdf
WooYun: 啪啪任意进入他人账号(OAuth 2.0无绑定token问题)
啪啪任意进入他人账号(OAuth 2.0无绑定token问题).pdf
WooYun: 淘网址sina oauth认证登录漏洞
淘网址sina oauth认证登录漏洞.pdf

0x2、参考

https://github.com/bit4woo/code2sec.com/tree/master/refrence/OAuth2.0