高级OAuth密钥泄露导致账户接管(ATO)漏洞分析

本文深入分析OAuth协议中state参数缺失、redirect_uri验证绕过、response_mode参数滥用等关键漏洞,通过多个实际攻击场景展示如何组合利用CSRF和开放重定向漏洞实现账户接管,包含详细的技术流程和防护建议。

高级OAuth密钥泄露导致账户接管(ATO)漏洞分析

OAuth基础原理

OAuth是一种委托访问框架,允许第三方应用在不共享密码的情况下代表用户执行操作。OAuth 1.0使用签名机制,而OAuth 2.0通过依赖TLS和承载令牌简化了流程。

OAuth 2.0允许用户使用外部提供商(如Google、Apple、Facebook)登录客户端应用,而无需在客户端输入邮箱或密码,核心在于后台的令牌交换机制。

关键组件

  1. 授权服务器:认证用户并颁发令牌的提供商(如Google)
  2. 客户端应用:通过OAuth登录的目标网站
  3. 授权码:从授权服务器获取的一次性代码,用于交换访问令牌
  4. 访问令牌:授予受保护资源访问权限的令牌
  5. 资源服务器:托管用户数据的服务器(如Google API服务器)

OAuth流程示意图

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
+--------+ +---------------+
| |--(A)------- Authorization Grant --------->| |
| | | |
| |<-(B)----------- Access Token -------------| |
| | & Refresh Token | |
| | | |
| | +----------+ | |
| |--(C)---- Access Token ---->| | | |
| | | | | |
| |<-(D)- Protected Resource --| Resource | | Authorization |
| Client | | Server | | Server |
| |--(E)---- Access Token ---->| | | |
| | | | | |
| |<-(F)- Invalid Token Error -| | | |
| | +----------+ | |
| | | |
| |--(G)----------- Refresh Token ----------->| |
| | | |
| |<-(H)----------- Access Token -------------| |
+--------+ & Optional Refresh Token +---------------+

攻击场景分析

场景一:CSRF攻击(state参数缺失)

state参数在第一步设置,可存储在cookie或本地存储中。授权服务器在多次重定向后验证第一步发送的state令牌是否与第三步一致。

如果应用程序不要求state参数,且授权服务器不进行验证,攻击者可通过CSRF攻击实现账户接管。

场景二:开放重定向(redirect_uri参数)

redirect_uri参数指定服务器重定向用户的URL,是重定向攻击的主要载体。攻击者配置自己的服务器作为redirect_uri,当受害者被重定向时,攻击者即可获取授权码。

现代应用通常会对redirect_uri进行白名单验证,因此攻击者需要利用开放重定向或其他技术窃取授权码。

绕过方法:

  1. 使用/indexOF: target.com.Attacker.com
  2. 伪造相对路径://attacker.com
  3. 使用/?前缀:https://attacker.com@target.com
  4. 多行正则表达式:attacker.com%0d%0atarget.com
  5. 参数污染:redirect=https://target.com&redirect=https://attacker.com

场景三:响应模式滥用(response_mode参数)

正常参数值为query,另一种可能值为fragment。当使用fragment模式时,授权码会出现在URL片段中而非查询参数。

如果回调端点只读取查询参数而忽略片段,授权码将暴露但未被使用。结合其他漏洞(如XSS)可导致授权码泄露,进而实现账户接管。

场景四:组合攻击(CSRF + 开放重定向)

通过改变response_mode为fragment,并在redirect_uri中嵌入攻击者代码,授权服务器会将受害者重定向到攻击者URL,受害者的授权码保留在URL片段中。

由于片段在重定向过程中保持不变,攻击者可提取授权码并交换为访问令牌,最终实现账户接管。

漏洞严重性

所有上述漏洞的严重等级均为严重级别,可导致完整的账户接管攻击。


签名:Mado
感谢阅读,希望本文对您有所帮助

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计