【$1650】挖掘Google SSO 中的账户接管漏洞

文化   2024-11-14 12:02   德国  

扫码领资料

获网安教程


Track安全社区投稿~  

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

大家好,在这篇博客文章中,我将通过与我的朋友 Refaat的合作,演示如何发现 Google SSO 用户的账户接管(ATO)。

img

这个账户接管是多个漏洞链的组合,让我们逐一探讨每个漏洞的细节

DOM XSS

这个 DOM XSS 漏洞位于一个棘手的位置。由于存在强力的 WAF(Web 应用防火墙),因此创建完整的攻击利用链非常具有挑战性。

img

获取 CSRF Token

在发现 XSS 漏洞后,我们知道任何攻击链都需要在请求中包含 CSRF token。获取 CSRF token 很简单,因为它位于个人资料页 https://taget.com/profile 的 meta 标签中。为了获取任何用户的 CSRF token 并将其随请求发送,可以使用以下脚本:

var xhr = new XMLHttpRequest();theUrl = 'https://target.com/profile'token = ''xhr.open("GET", theUrl, false); xhr.onload = async () => { const parser = new DOMParser(); const data = parser.parseFromString(xhr.response, 'text/html') token = data.getElementsByName('csrf-token')[0].content

解除 Google 账户绑定

此时,由于我们拥有 CSRF token,已经能够通过 XSS 发送任何经过身份验证的请求。然而,要实现账户接管(ATO),我们需要一个可以更改密码或电子邮件的请求。遗憾的是,我们发现的所有可能导致更改密码或电子邮件的请求都是安全的,且没有绕过的方法。

经过一段时间,我们发现了一些非常有趣的事情。我们发现用户可以使用 Google SSO 注册账户。当使用 Google SSO 登录时,用户可以选择解除与 Google 账户的绑定。这使得他们可以改为使用电子邮件和密码登录,而不再依赖 Google SSO。

img

当他们点击 继续 时,一组六位数的 OTP(一次性密码)将被发送到他们的电子邮件地址。

img

img

输入 OTP(六位数代码)后,用户可以直接设置新密码。

img

在这里,我们发现了一个漏洞:由于缺乏速率限制,OTP 代码可以通过暴力破解获得。

img

利用 XSS,我们可以通过向“解除 Google 账户绑定”发送请求并暴力破解 OTP,从而接管任何使用 Google SSO 登录的账户。一旦找到了正确的 OTP,我们便可通过正确的 OTP 发送设置新密码的请求。所有这些操作都可以利用泄露的 CSRF token 完成。

注意:我们没有将 2FA 绕过作为漏洞链的一部分进行报告,而是演示了使用另一功能的组织接管。我们在单独的报告中提交了 2FA 绕过问题,因为账户接管(ATO)无论是否绕过 2FA,其严重性都是相同的(高)。

以上内容由白帽子左一翻译并整。原文:https://7odamoo.medium.com/account-takeover-for-google-sso-users-b50f99b49f0d

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

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


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