*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

google-increases-its-bug-bounty-program-reward-money-to-ensure-maximum-identification-of-vulnerabilities.png今天的Writeup讲述了作者在谷歌供应商发票上传系统中,发现了其上传功能存在上传文件类型可更改缺陷,最终利用该缺陷在谷歌内部系统googleplex.com中实现了Bind XSS执行。以下是作者的分享。

谷歌票据提交系统

谷歌这种大厂商背后少不了各种电气和信息化供应商的产品支撑,为了了解工程进度和资金支付情况,谷歌提供了一个在线系统方便供应商向其上传一些电子化票据,该系统被称为Google Invoice Submission Portal(谷歌票据提交系统),地址为gist-uploadmyinvoice.appspot.com,如下:

01.png一眼就能看出,这是一个架构在谷歌免费应用空间(GAE)appspot.com的网站,谷歌自己也经常在GAE上架设应用网站,一段时间的优化完善之后,会把其生产版本转移到google.com或其它域名。我就搞不懂这个票据提交系统为什么会出现在appspot.com上呢?估计是忘记转移到google.com上了吧。

上传功能测试

在谷歌票据提交系统(Invoice Submission Portal)中,首先要求我们提供输入的是一个采购订单编号(Purchase Order Number)。这里我们随便输入一组数字,点击右边的放大镜搜索按钮。然后,它会跳出以下组织机构选项,这些选项初看起来像是按不同国家区分,这里,我们随便选择一个然后提交。

2019-06-20_163205.jpg之后,就会显示需要输入各种信息的页面,这些信息包括邮箱、票据号码、票据日期、税率等,另外还包含了一个名为“Upload Invoice*”的PDF票据上传按钮,选择它之后,会被要求上传小于15MB的PDF格式票据电子文件。

02.png

测试XSS漏洞

在上述各种输入区域内,我写入了各种XSS Payload,希望谷歌对这些区域的过滤净化机制存在不足,能有效实现XSS反弹,但最终,我一无所获。

做完输入区域的XSS测试之后,只剩下票据上传功能了,我们来深入分析看看。从其源码可以发现,它只接收后缀名为.pdf格式的文档。

03.png我想这只是一个前端的验证机制,我们可以在POST请求中来尝试修改上传文档的后缀名,于是,通过拦截抓包,我们获取了正常的PDF票据上传POST请求,如下:

04.png如果在这个请求中,我们尝试把上传票据文件后缀名进行一个更改如何,把它从.pdf更改为.html。所以先把其文件名称和后缀更改为test.html,然后把对应的Content-Type 也更改为了 text/html,当然文件内容为ezXSS生成的一个XSS Payload,其中的<script>标签结合src属性的指向为我控制的一个网站,每当Payload加载时,就会向我的邮箱发送一个提示消息邮件。如下: 

05.png构造好之后,我们选择提交,该HTML文件就被成功提交了。

Blind XSS有效执行

几天之后,我邮箱里就收到了一封XSS Payload在谷歌内部系统googleplex.com有效执行的提示消息。

06.png由于googleplex.com是谷歌的内部系统,只有内部员工才能登录应用,外部员工直接访问会被跳转到一个内部员工登录页面(Google Corp login page),也就是我们说的 MOMA login page,但也只有谷歌的身份凭据信息才能登录进入。

这种替换PDF文件的方式,在googleplex.com中被识别成了PDF,但其实,它是一个HTML文件,最终会被解析成HTML执行,当然其中的XSS Payload也随之而生效了。

漏洞影响

如果攻击者构造的XSS Payload是一段精心编写的JS代码,那么谷歌员工点击之后,在googleplex.com中执行,将会造成票据信息和其它内部敏感信息泄露。由于谷歌员工是用自己的公司账号进行googleplex登录的,所以,进一步的漏洞构造,还可能造成身份劫持等风险,严重威胁其它谷歌内部系统。

但经漏洞上报后,谷歌给了我及时回复,其中声明:对googleplex.com的入侵并不会造成其它googleplex.com应用的访问控制,googleplex中的各个应用系统都是相对独立的,各个系统的凭据信息并不能执行通用登录。

谷歌的回复说明,虽然不能针对该漏洞继续深入利用,但至少可以对票据处理相关的内部系统造成破坏影响或入侵威胁,其它googleplex.com系统,由于CORS的应用,不能形成实质影响。

漏洞修复

在上报给谷歌安全团队的漏洞报告中,我详细给出了相关细节和相关利用信息,四天之后,我收到了谷歌官方的漏洞确认和赏金奖励信息。

07.png一个月之后,谷歌回复我称漏洞已经修复。

漏洞上报进程

2019.2.21   漏洞初报

2019.2.22  谷歌把漏洞定级为P2

2019.2.25  谷歌再次把漏洞级别提升为P1

2019.3.6    漏洞赏金发放

2019.3.26  漏洞修复

*参考来源:appio,clouds编译,转自FreeBuf