快捷搜索:  网络  CVE  渗透  后门  扫描  木马  黑客  as

挖洞经验 | 看我怎么样发现Google生产收集SSRF漏洞获取$13337赏金

google-bug-bounty-program.png

今年3月份时,我曾上报过Google的任意html/javascript网页在线嵌入工具Caja的一个XSS漏洞,到5月份时,这个漏洞才被修复。以后,我想看看谷歌协作平台(Google Sites)网站调用的Caja服务是否还存在这个未修复漏洞。因而,对Google Sites进行了一番测试,可惜这个Caja XSS漏洞是不存在的,但经过别的方向的深入测试,我发现了Google内部生产收集的SSRF漏洞。

违景先容

Google Sites:谷歌协作平台是一款在线协作编辑工具,它可以帮助企业创建企业内网、项目治理跟踪、外延网、和别的类型的定制网站。用户可以通过Google Sites将所有类型的文件包括文档、视频、图片、日历等与挚友、团队或全部收集分享。

Google Caja服务会解析html/javascript文件,并会消除掉其中像iframe、object对像标记以及document.cookie等敏感javascript内容,起到安全过滤作用。通常,Caja服务首要针对客户端的HTML标记进行解析以及安全过滤,然则,对于一些类似<script src=”xxx”>的遥程调用javascript标记来说,遥程资源的获取、解析以及过滤是在服务端进行的。

端倪发现

我曾试图在我的自架服务器上托管了一个javascript文件,像如许https://[attacker].com/script.js,以后把它嵌入到一个遥程调用标记中,以此来测试 Google Sites 服务端的XSS漏洞,但可惜Google Sites 服务端的响应显示,https://[attacker].com/script.js没法走访。

经过几多测试,我才意想到Google Sites中的Caja服务只会调用谷歌自身的资源文件,就像https://www.google.com 或 https://www.gstatic.com 网站托管的文件才行,但像https://www.facebook.com 如许的外部资源就不行啦。

这就有点希罕了,因为Caja服务遥程调勤恳能原先就是可以获取到任何外部资源的啊,这类配置看起来就像一个被损坏的功能。更故意思的是,由于谷歌的服务网站无比之多,要确定某个外调URL链接是否属于谷歌,照样有些难度的。除非……

发现Google的SSRF漏洞

每一当我能通过服务端应用获取到任意内容时,我都会顺便测试一下SSRF漏洞。针对Google的应用服务,我做过好多SSRF测试,但没有一次是成功的。对Google Caja服务端怪异举动的诠释,唯一的可能就是,Caja的链接提取动作发生在Google内部收集的,而且Google只能调用提取自身的资源文件新闻,而别的的外部资源文件就不行。这从逻辑上来说,可以算是一个bug,现在的问题是,它是否算得上一个安全漏洞!

在Google服务器上托管以及运行任意代码无比容易,例如使用Google云服务啊!因而,我创建了一个Google App Engine应用实例,并在上面托管了一个javascript文件。然后,我将这个javascript文件的URL链接,作为外部资源引用链接在我的Google Sites页面上作了设置。以后,Google Caja服务端成功获取并解析了该javascript文件。据此,我查看了我的Google App Engine实例日记,看看这个外部资源链接到底是谁来要求它的,啊哈,出现了一个IP地址:10.x.x.201,这显然是一个内部收集IP地址啊!有点希翼了!

那么,我用包含这个Google内部收集的IP地址作为Google Sites页面的javascript调用外链会产生什么结果呢?试试吧,一块儿来静待真象。但在要求以后快半分钟了,照样没啥反应,我都以为是否是要求被拦截了,就快要把页面关闭了。然则,当我查看 Google Caja 服务的响应时,却发现其响应数据并不象通常的1KB左右的典型错误新闻,而是有1MB容量的内容!这些1MB的响应新闻是来自Google内部收集的某IP地址 10.x.x.x,此时,我是至关的兴奋!关上这个1MB文件,我发现其中包含了很多Google内部收集体系的敏感信息!

行使SSRF漏洞获取到的Google内部信息

起首,我想说的是,我并没有对Google内部收集进行过探测扫描,我只是对其内网测试了3个要求就确定了该SSRF漏洞,并马上上报给了谷歌的漏洞团队VRP,48小时以后,Google团队修复了该漏洞。在此之前,我也好奇心强烈地创建了别的2到3个要求,想看看能否基于该SSRF漏洞,深入行使发现别的的未制约文件走访或RCE漏洞,但可惜最后都没有。

我创建的第一个要求是发向 http://10.x.x.201/ 的,它响应了一个 “Borglet” 的服务器状态监控页面。我对此进行了一些Google查询,发现这是Google内部的大规模集群治理体系Borg。经历多种架构演化,Google曾在2014年开源了 Borg的继任体系Kubernetes,虽然Kubernetes越来越受欢迎,但谷歌内部的生产收集架构仍旧严重依靠Borg体系。Borg单元由一组机器,一个称为Borgmaster的逻辑中央控制器以及单元中每一台机器上运行的称之为Borglet的代办署理进程构成。02.png

我创建的第二个要求是发向 http://10.x.x.1/ 的,它响应了另一个 “Borglet”  服务器状态监控页面,我创建的第三个要求则是 http://10.x.x.1/getstatus,它的响应主体也是一个 “Borglet”  服务器状态监控页面,但其中包含了很多进程义务的权限以及参数等具体信息。

每一个Borglet代表一台服务器,从硬件方面来说,10.x.x.1 以及 10.x.x.201 这两台服务器都使用了英特尔第四代架构的Haswell 2.30GHz 72内核CPU,至关于一组2到3个Xeon E5 v3 CPU处理器。这两台服务器都使用了 77%的CPU,它们具备250 GB内存,使用量达 70%。它们的硬盘容量都是2TB硬盘,且每一台硬盘容量几乎都是空的,只有15个G的使用据有空间。所以,重要数据可能存储在别的地方。

服务器中的处理进程无比多样化,我想这类方式多是一种资源优化手段吧,有些进程在使用着内存,别的的可能在用CPU、收集等,有一些则具备高优先权,等等…。还有一些服务看似无比活跃:如视频编码、Gmail以及广告等。这也并不希罕,因为视频处理无比繁重,Gmail是谷歌的首要服务之一,而广告是谷歌的核心营业。

我没有在服务器义务列表信息中看到Google Sites 或 Caja服务,所以要成功形成SSRF漏洞,要么是通过一个代办署理,或是 10.x.x.201 服务器上的,有别于我在Google App Engine实例日记中的,别的收集环境下的一个Borglet来形成的。01.png

在架构方面,我们可以发现很多Google体系栈相干的元素,特别是 MapReduce, BitTable, Flume, GFS…等。在手艺方面,Java使用频率较高,我没发现任何关于Python、c++、NodeJS或Go说话的提及,但这也并不象征着Google没使用这些编程说话,不能定论。

我想说的是, Borg 以及 Kubernetes 同样都依靠Docker 以及 VM捏造机如许的容器手艺。另外,在视频处理方面,Google使用的是其开源工具Gvisor,Gvisor貌似能在容器运行以及捏造机安全方面外观不错。

从SSRF漏洞获取的参数中,有着收集端口到应用程序映照信息。在Borg体系中,貌似每一个服务器上的所有应用程序都同享相同的IP地址,且每一个应用程序都有一些专用的端口。

对我来说,满是代码的应用程序参数是最故意思的部份。我虽然没能发现神秘的Google搜索排名算法道理,然则我发现了以下一些有趣的查询:

MSCR(M(Customer.AdGroupCriterion+Customer.AdGroupCriterion-marshal+FilterDurianAdGroupCriterion+FilterNeedReviewAdGroupCriterion+GroupAdGroupCriterionByAdGroupKey+JoinAdGroupData/MakeUnionTable:3)+M(JoinAdGroupData/MakeUnionTable:2)+M(Customer.AdGroup+Customer.AdGroup-marshal+FilterDurianAdGroup+ParDo(AdGroupDataStripFieldsFn)+JoinAdGroupData/MakeUnionTable)+R(JoinAdGroupData/GroupUnionTables+JoinAdGroupData/ConstructJoinResults+JoinAdGroupData/ExtractTuples+ExtractCreativeAndKeywordReviewables))

你可能会想,Gmail的体系用户是什么呢?它是:

gmail@prod.google.com

还有一个名为 “legal-discovery@prod.google.com” 的用户,据我推测,它具备针对 “mdb:all-person-users” 用户的 “auth.impersonation.impersonateNormalUser”权限。

在我的测试中,大部份义务还没实现就被无故停止执行了。最后,还存在大批指向别的Google服务器以及应用服务端的URL链接,特别是,当我尝试去走访一个颇有可能的 http://wiki/ 链接时,竟然没成功。因而乎,我在该服务上测试了下列链接:

/getFile?FileName=/sys/borglet/borglet.INFO

Google VRP 安全团队的响应

我于2018年5月12日礼拜六上报了这个漏洞,它被Google自动分类为P3中等优先级问题。在礼拜天,我又向Google 安全团队发送了一封漏洞邮件,希翼对方能有所响应。礼拜一一大早,该漏洞就被抬举为P0(高危)级,以后又被降为 P1 级,礼拜一夜,漏洞就得到了修复,相干漏洞服务端被删除。

确定SSRF漏洞的影响风险无比不易,因为这要看内部收集的实际情形而定。Google偏向于让其大部分基础架构在内部可用,与此同时,使用了大批web应用端,这就象征着,要是发生SSRF漏洞,攻击者可能会间接走访到数百甚至数千个内部web应用程序。但另一方面,Google严重依靠认证来完成资源走访,这类手段某种程度上也制约了SSRF漏洞的威胁。

但在Google的认证手段下,Borglet状态监控页面未经身份验证,黑客技术,就泄露了很多关于内部收集的基础举措措施信息。但据我了解,Kubernetes体系的这类状态监控页而是要经身份验证的。

终极,Google安全团队奖励了我 $13,337美金,这至关于未授权文件走访级其它高危漏洞了。Google对该奖励的诠释是,虽然其大多数内部资源需要身份验证,但他们发现很多内部开发项目或调试处理程序,可以被攻击者行使的不仅是信息泄露问题,因此他们决定奖励这类存在严重潜伏影响的漏洞。谢谢Google的激昂大方赏金以及快速反应。

*参考来源:opensec,clouds 编译,

您可能还会对下面的文章感兴趣: