从低危OAuth漏洞到高危存储型XSS

iso60001  2153天前

22.png

大家好,这篇文章将展示我最近发现的一个很酷的漏洞,让我们开始吧!

前不久,我对hackerone上的某个悬赏目标进行了一番研究,发现了一个Self-XSS漏洞(AngularJS模板注入)和一个OAuth的配置错误漏洞。这两个漏洞本身都是低危漏洞,不会造成很大的影响,但如果结合在一起,就会生成一个高危的存储型XSS漏洞!

出于安全等原因,我称这个目标网站为redacted.com

这个网站主要提供网络存储服务,就像Google Drive或DropBox一样。用户可以在这个网站上传、下载、共享他们的文件。

我经过一番摸索在上传文件的文件名处找到了一个XSS。只要你上传一个文件名如{{constructor.constructor(‘alert(1)’)()}}.jpg这样的文件,那么你就会在上载文件的管理页面上看到XSS弹框。

很好!但可惜这只是一个Self-XSS。

当然,有一种简单的方法可以用它攻击其他用户,就是和受害者共享一个指向文件的链接,一旦受害者点击,攻击就会生效。但在这篇文章中,我将向你展示一种更有趣的利用方法。

在网站的设置中,我发现了一个从Dropbox导入文件的功能。为了使用这个功能,你需要通过OAuth将你的Dropbox帐户和这个网站绑定。

为了方便理解,我将快速解释一下这个OAuth流程。

  1. 首先,用户单击Connect Dropbox按钮,浏览器就会发出如下GET请求(https://dropbox.com/oauth2/authorize?client_id=***********&response_type=code&state=****************&redirect_uri=https%3A%2F%2Fwww.redacted.com%2Faccount%2Fsettings%2Fdropbox-callback)
  2. 然后用户被重定向到Dropbox,登录帐户并授予访问权限。

33.png      

       3.单击上图的“Allow”后,包含状态参数和身份验证码的GET请求将被发送到redacted.com,如下图所示。

44.png 

4.一旦redacted.com接收执行这个GET请求,Dropbox将同步当前用户的session,并将其存储的所有文件导入redacted.com

当我测试以上OAuth流程时。尝试把我的Dropbox帐户和其他redacted.com用户绑定在一起,一开始时我觉得这应该不难。

重定向的uri被列出来了,状态参数也在那里,虽然身份验证码不能使用两次,但是我仍然测试了状态参数,发现验证过程时和当前用户的session的有关联。

所以,我不能简单地给其他redacted.com用户发送链接https://www.redacted.com/account/settings/dropbox-callback?state=********code=**********来攻击。但是,出于好奇,我删除了状态参数,以其他用户身份点击了https://www.redacted.com/account/settings/dropbox-callback?code=**********,我惊讶的发现,我的Dropbox帐户成功绑定到其他帐户。

55.png

所以,最终,我可以通过一个GET请求将我的Dropbox帐户与任何人的redacted.com帐户绑定到一起。你可能会问,这有什么用?又不可以使用Dropbox帐户登录redacted.com,系统没这个功能。

但是,结合上一个XSS漏洞,我可以形成如下攻击链。

利用场景

  1. 往Dropbox上传一个文件名为{{constructor.constructor(‘alert(1)’)()}}.jpg的文件。

  2. 将如下恶意URL,分享给受害者https://www.redacted.com/account/settings/dropbox-callback?code=**********

  3. 受害者一旦点击,就会绑定到我的Dropbox帐户,并自动从Dropbox导入所有文件,包括那个恶意XSS文件。

  4. 当用户访问上载的文件的管理页面时,XSS便攻击成功了。

总的来说,服务器只会在状态参数存在的情况下进行参数验证,如果不存在状态参数,那就直接下一步。

我们可以猜测后端验证逻辑如下:

if(isset($_GET['state'])){
    if($_GET['state'] != current_user_state)
        ACCESS DENIED
        exit()
}
ACCESS GRANTED

如上所述,一个利用OAuth漏洞来实现存储型XSS的攻击手法就完成了。

最后欢迎大家关注我的推特

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/@nahoragg/chaining-tricky-oauth-exploitation-to-stored-xss-b67eaea4aabd

最新评论

昵称
邮箱
提交评论