扫码领资料
获网安教程
来Track安全社区投稿~
赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)
在本文,我们将探讨一种由于 OAuth 配置错误而导致的 账号接管漏洞。我在一家云计算公司的域名网站以及一个知名电商网站上发现了此类漏洞。那么,话不多说,让我们开始吧!
首先,让我们了解 什么是 OAuth。
OAuth(开放授权) 是一种开放标准协议,它允许在不共享用户凭据的情况下安全地访问资源。它使第三方应用程序能够代表用户访问特定数据或执行某些操作,而无需用户的密码。OAuth 通常用于授权而非身份验证。
以下是 OAuth 工作原理的简要概述:
1. 用户授权: 当用户希望为应用程序提供访问其信息的权限(例如社交媒体上的信息)时,他们会被重定向到平台(如 Google、Facebook)以授予权限。
2. 访问令牌: 在授予权限后,授权服务器向应用程序提供访问令牌。此令牌允许应用程序在不需要用户凭据的情况下请求仅被允许的资源。
3. 限制访问: 应用程序使用此令牌访问用户授权的特定数据或功能,例如查看联系人、代表用户发帖等。
4. 令牌过期与撤销: 出于安全考虑,访问令牌通常是短期有效的。用户或授权服务器可以随时撤销令牌以限制访问。
由于域名和漏洞赏金计划是私密的,我将其称为 “domain.com”。让我们回顾一下整个过程。
我收到了参与一个私密漏洞赏金计划的邀请,并接受了邀请。
加入计划后,我进入了应用程序的登录页面,发现他们提供了一个通过 OAuth(例如 Google)登录的选项。
出于好奇,我将鼠标悬停在“使用 Google 登录”的 OAuth 图标上,观察到了如下 URL:
callbackUrl
参数用于指定用户成功通过 Google 验证后应该重定向的地址。它被设置为重定向到 https://dash.domain.com/auth/login?returnFromSSO=true
。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。突破:捕获访问令牌
1. 含重定向 URL 的 OAuth 流程:
2. 未限制的回调 URL 带来的漏洞:
3. 漏洞的利用方式:
4. 影响:
5. 预防措施:
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
如果你是一个网络安全爱好者,欢迎加入我的知识星球:zk安全知识星球,我们一起进步一起学习。星球不定期会分享一些前沿漏洞,每周安全面试经验、SRC实战纪实等文章分享,微信识别二维码,即可加入。