通过 Google OAuth 配置错误实现账号接管

文化   2024-11-18 12:00   美国  

扫码领资料

获网安教程


Track安全社区投稿~  

赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)

在本文,我们将探讨一种由于 OAuth 配置错误而导致的 账号接管漏洞。我在一家云计算公司的域名网站以及一个知名电商网站上发现了此类漏洞。那么,话不多说,让我们开始吧!

img

首先,让我们了解 什么是 OAuth

OAuth(开放授权) 是一种开放标准协议,它允许在不共享用户凭据的情况下安全地访问资源。它使第三方应用程序能够代表用户访问特定数据或执行某些操作,而无需用户的密码。OAuth 通常用于授权而非身份验证。

以下是 OAuth 工作原理的简要概述:

1. 用户授权: 当用户希望为应用程序提供访问其信息的权限(例如社交媒体上的信息)时,他们会被重定向到平台(如 Google、Facebook)以授予权限。

2. 访问令牌: 在授予权限后,授权服务器向应用程序提供访问令牌。此令牌允许应用程序在不需要用户凭据的情况下请求仅被允许的资源。

3. 限制访问: 应用程序使用此令牌访问用户授权的特定数据或功能,例如查看联系人、代表用户发帖等。

4. 令牌过期与撤销: 出于安全考虑,访问令牌通常是短期有效的。用户或授权服务器可以随时撤销令牌以限制访问。

img

由于域名和漏洞赏金计划是私密的,我将其称为 “domain.com”。让我们回顾一下整个过程。

我收到了参与一个私密漏洞赏金计划的邀请,并接受了邀请。

加入计划后,我进入了应用程序的登录页面,发现他们提供了一个通过 OAuth(例如 Google)登录的选项。

出于好奇,我将鼠标悬停在“使用 Google 登录”的 OAuth 图标上,观察到了如下 URL:

https://domain.com/openid/google?callbackUrl=https://dash.domain.com/auth/login?returnFromSSO=true&errorUrl=https://dash.domain.com/auth/login?returnFromSSO=true
img
URL 参数解析
1.回调 URL(Callback URL):
callbackUrl 参数用于指定用户成功通过 Google 验证后应该重定向的地址。它被设置为重定向到 https://dash.domain.com/auth/login?returnFromSSO=true
2.错误 URL(Error URL):
errorUrl 参数可能用于处理验证失败的情况,用户在身份验证失败时会被重定向到指定地址(在此例中为 https://dash.domain.com/auth/login?returnFromSSO=true)。

第一次尝试:碰壁

我的第一个想法很简单:将 callbackUrl 参数替换为我的 Webhook URL,看看在 OAuth 流程完成后,应用程序是否会将访问令牌发送到我的 Webhook。然而,当我尝试这么做时,应用程序返回了一个错误,拒绝完成 OAuth 流程。显然,它设置了一些限制。
我没有放弃,转而关注 errorUrl 参数,想知道它是否可以成为另一个突破口。我将 errorUrl 修改为我的 Webhook URL,希望在发生错误时,应用程序会将用户重定向到我的域。然而,这次尝试也以失败告终,应用程序阻止了任何未经授权的域名出现在 errorUrl 中。

新方法:逐步测试

既然直接修改参数无法奏效,我决定尝试一种更系统化的方法:逐一测试每个参数,观察应用程序的具体响应。
我首先完全移除了 errorUrl 参数,只留下 callbackUrl,并将 callbackUrl 设置为我的 Webhook URL。
img
Before Requested OAuth
我发送了修改后的请求。这次,应用程序没有报错,而是正常地跳转到了 Google 登录页面,似乎一切如常。

突破:捕获访问令牌

兴奋之余,我使用一个测试 Google 账户完成了 OAuth 流程。在选择账户后,OAuth 流程结束,应用程序将我重定向到了我的 Webhook URL,而不是合法的域名。此时,URL 参数中已经包含了访问令牌!
img
After Auth Completion
成功了!应用程序将访问令牌重定向到了我注入的 URL,从而成功暴露了令牌。有了这个令牌,我现在可以以用户授予的所有权限访问该账户。
img
这种漏洞被称为 “OAuth 配置错误(回调 URL 的开放重定向漏洞)”,它发生在应用程序在 OAuth 授权流程中未正确验证或限制回调 URL(重定向 URL)时。以下是该漏洞如何导致账户接管的分解:

1. 含重定向 URL 的 OAuth 流程:

在 OAuth 授权流程中,Web 应用程序通常通过将用户重定向到 OAuth 提供方(如 Google、Facebook 等),请求用户授权第三方应用程序。一旦用户授予访问权限,OAuth 提供方会生成一个访问令牌,并通过 “回调 URL”(callback URL)(又称重定向 URL)将其发送回应用程序。

2. 未限制的回调 URL 带来的漏洞:

理想情况下,Web 应用程序应严格验证回调 URL,以确保其仅指向受信任的域(如应用程序自身的域)。然而,如果回调 URL 参数存在漏洞,允许攻击者指定任意域名,就会产生安全风险。在这种情况下,攻击者可以将自己的 URL 注入为回调 URL。

3. 漏洞的利用方式:

攻击者可以通过以下方式利用该漏洞:
攻击者构造一个恶意 URL,其中包含其域名作为回调(重定向)参数。
当受害者点击该 URL 并完成 OAuth 授权时,OAuth 提供方会生成访问令牌。由于存在易受攻击的重定向机制,访问令牌会被发送到攻击者的域,而不是合法应用程序的回调 URL。
攻击者由此捕获受害者的访问令牌。

4. 影响:

利用受害者的访问令牌,攻击者可以在受害者账户中执行操作和访问数据,就像他们是合法用户一样。这可能导致账户接管、未经授权访问个人信息以及其他严重的安全问题。

5. 预防措施:

为了防止此类漏洞,开发人员应对回调 URL 实施严格的验证:
仅允许预定义的、经过白名单验证的 URL 作为回调。
拒绝或清理任何未经授权的 URL。
使用参数化重定向等技术,防止攻击者注入恶意域名。
通过实施这些控制措施,Web 应用程序可以显著降低 OAuth 中开放重定向漏洞的风险,并防止未经授权访问用户账户。
以上内容由白帽子左一翻译并整。原文:https://cybersecuritywriteups.com/account-takeover-via-google-auth-misconfiguration-af4a59dd82e7

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

如果你是一个网络安全爱好者,欢迎加入我的知识星球:zk安全知识星球,我们一起进步一起学习。星球不定期会分享一些前沿漏洞,每周安全面试经验、SRC实战纪实等文章分享,微信识别二维码,即可加入。

白帽子左一
零基础也能学渗透!关注我,跟我一启开启渗透测试工程师成长计划.专注分享网络安全知识技能.
 最新文章