如何绕过Uber的CSP防御成功实现XSS攻击

41yf1sh 漏洞 2018年9月26日发布
Favorite收藏

导语:起初,我试图在Uber的子域名上,寻找一些开放式重定向漏洞。尽管我知道,Uber他们没有将开放式重定向问题作为漏洞看待,但我认为,如果存在这一问题,可以与其他漏洞相结合,从而实现帐户越权登陆或者其他漏洞利用方式。

前言

各位“猎人”们,大家好。在我们开始详细分析漏洞之前,首先想对自己做一个简单的介绍。

我并不是安全研究员或安全工程师,我只是一个乐于学习新事物并且每天都在努力提升自己的人。此前,由于上学的原因,我没有机会将自己的发现记录下来,但现在由于我正处于假期,并且我相信分享能带来共赢,因此我决定每周都发布一篇文章。我的安全之旅始于2年前参加的Uber漏洞赏金计划。尽管我在这个漏洞赏金计划中不是新手,但在安全圈里我却是一个彻头彻尾的萌新,因此我的博客可能对于安全专家来说并不是很有趣。不管怎样,让我们开始分析这一漏洞。

起源

起初,我试图在Uber的子域名上,寻找一些开放式重定向漏洞(Open Redirect Vulnerabilities)。尽管我知道,Uber他们没有将开放式重定向问题作为漏洞看待,但我认为,如果存在这一问题,可以与其他漏洞相结合,从而实现帐户越权登陆或者其他漏洞利用方式。我立刻将这一想法付诸了行动。当我在partners.uber.com上寻找突破口时,这个URL引起了我的兴趣:

https://partners.uber.com/carrier-discounts/att/redirect?href=http://www.wireless.att.com/

经过验证,这个URL存在开放式重定向的问题。在找到了这个位置之后,我们还必须要寻找到另一个漏洞,并与之组合利用。但随着时间的推移,很多个小时过去了,我还是没能找到其他的漏洞,因此也无法将详情报告给Uber。

针对这一漏洞,Uber方面是这么说的:

针对开放式重定向,99%的漏洞只具有低安全性影响。但对于产生较大影响的高危漏洞,我们还是会接收此类漏洞提交。

一周后,我检查了这个URL,发现该URL已经不存在此前的问题。无论你输入什么HTTP参数,该URL都会重定向到https://www.wireless.att.com

那么问题来了,究竟是他们自己意识到这个问题,还是有人报告过这一问题呢?我并不知道,但这也不重要。于是,我继续开始探寻Uber存在的其他漏洞,并把重点放在了XSS漏洞上。

漏洞详情

如果我问你,在Uber的所有链接之中,大家最熟悉的链接是什么?你的答案可能会是邀请链接。因为,我们可以在各种地方看到这些链接:论坛帖子、Twitter、Facebook、Instagram……

邀请链接的URL与上面的不同:

https://www.uber.com/a/join?exp_hvp=1&invite_code=bq6ew1w9ue

我检查了这个地址,但没有发现XSS的漏洞。

那么,这个如何?

https://partners.uber.com/p3/referrals/ms?i=bq6ew1w9ue

这个URL中使用的是相同的邀请代码。在用户点击后,它将会重定向到其他URL上,然而却没有检查其他参数。

在这个严重问题的帮助下,我开始在这个子域名范围内寻找漏洞。

网站是:partners.uber.com。

通过上面这个问题的帮助,我们找到了一个非常大的邀请链接列表。此时,我认为应该找到另一个参数,随后便发现了一个。

https://partners.uber.com/p3/referrals/ms?i=bq6ew1w9ue&m=ANNIVERSARY&v=1

这个URL看起来很酷,但XSS在哪里呢?其中,“v”参数表明Uber司机工作了多少年,就像庆祝周年纪念日一样。在我发现这个参数之后,我立即尝试注入一些XSS Payload,但最后XSS没有弹出窗口,于是我查了一下源代码。

原始代码:

content=”static/images/milestones/anniversary/anniversary_1.png” />

注入Payload后代码:

content=”static/images/milestones/anniversary/anniversary_1 “><img src=x onerror=alert(document.cookie)>.png” />

正如大家所看到的,没有对其进行过滤,同时也没有XSS弹出窗口。发生这样的情况,首先要考虑内容安全策略(Content Security Policy)。

什么是CSP呢?正如Netsparker的博客所说的:

内容安全策略(CSP)标准是一种有选择的指定应该在Web应用程序中加载哪些内容的方法,这一点可以通过使用随机数或者散列,将特定来源列入到白名单中来实现。

因此,如果有任何列入白名单的域名,我们可以尝试借助这些域名来对抗CSP。请各位读者查看Uber partner.uber.com域名的CSP头部。内容很长,我只截取script-src之后的部分。

script-src ‘self’ ‘unsafe-inline’ ‘nonce-9f4b94bf-a195–4d8c-b474–879ae6d1d471’ ‘self’ ‘unsafe-inline’ https://pullo.uberinternal.com https://apis.google.com https://www.google.com https://d1a3f4spazzrp4.cloudfront.net https://*.uber.com https://rules.quantcount.com https://www.google-analytics.com https://ssl.google-analytics.com https://d3i4yxtzktqr9n.cloudfront.net https://d1a3f4spazzrp4.cloudfront.net;

首先,我检查了rules.quantcount.com,并查找了json终端,但没有什么成果。对我们来说,有一个巨大的趋势,就是他们将.uber列入白名单。因此,如果我们能找到任何带有回调的JSON终端或者相似内容,那么都可以执行XSS。与此同时,我通过阅读Stamone的“DOM XSS — auth.uber.com”博客,学到了不少知识,也推荐给各位读者阅读。

Stamone的报告内容如下:http://stamone-bug-bounty.blogspot.com/2017/10/dom-xss-auth14.html。除此之外,他还成功绕过了CSP。在他的报告中,CSP已经允许他从*.marketo.com获取一些东西。

所以,他使用了基本的dorks,并找到了一个回调参数,在这里效果很好。

1.png

在看完这篇文章之后,我立即访问VirusTotal并检查了Uber的子域名,其中有一个域名是mkto,我不禁好奇地问,mkto是Marketo的简称吗?

2.png

是的,它是。因此系统会将我们重定向到https://app-ab19.marketo.com/index.php 。这绝对是marketo,但现在用它来对付CSP。借助于基本的Payload,我创建了这个链接,并进行检查,从而确定出这个地方存在问题。

https://partners.uber.com/p3/referrals/ms?i=bq6ew1w9ue&m=ANNIVERSARY&v=1"><script src=”https://mkto.uber.com/index.php/form/getKnownLead?callback=alert(document.domain);"></script>

3.png

由此,我就得到了XSS。

时间节点

2018年3月8日 向Uber报告漏洞详情

2018年4月3日 在Hackerone上只披露有限内容

2018年8月7日 将该漏洞改为“Triaged”

2018年8月22日 发送并询问有关流程的其他问题

2018年8月23日 Uber正式对mefkan表示感谢,并声称已将该问题传递给内部团队。

2018年8月27日 漏洞已修复

2018年8月30日 获得2000美元奖励

经验

1、不要总认为某个URL点击量特别大,所以就无需检查它是否存在问题。如果是这样,我保证你会错过很多漏洞的。

2、经常阅读别人写的Write-Up,如果你正在寻找一些特别详细的知识,那么只需要对Write-Up进行正确的阅读和理解。

3、不要放弃,尽自己最大努力,不断尝试,最后会得到想要的东西。

总结

这是我的第一篇漏洞Write-Up,正如我在开头所说,我将会每周发表一篇新文章,因此请大家在Twitter上关注我,随时与我分享你的问题和想法,我希望通过这样的文章发布,有助于水平与我相似的人提升技术水平。

本文翻译自:https://medium.com/@efkan162/how-i-xssed-uber-and-bypassed-csp-9ae52404f4c5如若转载,请注明原文地址: http://www.4hou.com/vulnerable/13800.html
点赞 2
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论