GMail XSS 漏洞分析

本文详细介绍了GMail AMP4Email功能中出现的一个XSS漏洞,该漏洞利用了DOM Clobbering技术。作者通过分析,发现AMP4Email对动态邮件的强验证器并不能阻止DOM Clobbering,通过重写特定属性,可以控制脚本URL,从而执行XSS攻击。虽然最终由于Content-Security-Policy(CSP)未能实际执行,但这一发现揭示了潜在的安全风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击上方蓝字“madMen”关注我哟

原文:https://research.securitum.com/xss-in-amp4email-dom-clobbering/

译者:https://github.com/neal1991

这篇文章是我在2019年8月通过 Google 漏洞奖励计划报告的 AMP4Email 中已经修复的 XSS 的文章。该 XSS 是对著名浏览器问题 DOM Clobbering 的真实利用案例。

什么是 AMP4Email

AMP4Email(也称为动态邮件)是 Gmail 的一项新功能,可以让电子邮件包含动态 HTML 内容。尽管撰写包含 HTML 标签的电子邮件已经很多年了,但通常认为 HTML 仅包含静态内容,即某种格式,图像等,没有任何脚本或表单。AMP4Email 打算更进一步,允许电子邮件中包含动态内容。在 Google 官方 G Suite 官方博客中的帖子中,对动态邮件的使用案例进行了很好的总结

通过动态邮件,你可以轻松地直接从消息本身直接操作,例如对事件进行快速回复,填写问卷,浏览目录或回复评论。

以在 Google 文档中进行评论为例。现在,你将不再在有人在评论中提及你时接收到单独的电子邮件通知,而是会在 Gmail 中看到最新的主题,你可以在邮件中直接从中轻松回复或解决评论。

该功能引发了一些明显的安全性问题。最重要的一个可能是:跨站点脚本(XSS)?如果我们允许电子邮件中包含动态内容,是否意味着我们可以轻松地注入任意 JavaScript 代码?好吧,答案是否定的;没那么容易。

AMP4Email 具有强验证器,简而言之,它是允许在动态邮件中使用的标签和属性的强大白名单。你可以在 https://amp.gmail.dev/playground/ 上尝试,你还可以给自己发送动态电子邮件来研究工作原理!

图1. AMP4Email playground

如果你尝试添加验证器未明确允许的任何 HTML 元素或属性,则会收到错误消息。

图2. AMP 验证器禁止使用任意脚本标签

在使用 AMP4Email 并尝试各种方法绕过它时,我注意到标签中不允许 id 属性(图3)。

图3.不允许使用属性 id

这看起来像是开始安全分析的好地方,因为创建具有用户控制的id属性的HTML元素可能会导致 DOM Clobbering。

DOM Clobbering

DOM Clobbering 是 web 浏览器的遗留功能,给许多应用程序带来麻烦。基本上,当你在 HTML 中创建一个元素(例如 <inputid=username>),然后希望从 JavaScript 引用该元素时,通常会使用 document.getElementById('username') 或者 document.querySelector('#username') 之类的函数。但这不是唯一的方法!

传统的方法是仅通过全局 window 对象的属性来访问它。因此,在这种情况下, window.usernamedocument.getElementById('username') 完全相同!如果应用程序基于某些全局变量的存在做出决定(例如, if(window.isAdmin){...}),则此行为(称为 DOM Cloberring)可能导致有趣的漏洞。

为了进一步分析 DOM Clobbering,假设我们有以下 JavaScript 代码:

if(window.test1.test2) {
eval(''+window.test1.test2)
}

我们的工作是通过仅使用 DOM Cloberring 技术执行任意 JS 代码。要完成这个任务,我们需要找到两个问题的解决方案

  1. 我们知道可以在 window 上创建新属性,但是可以在其他对象上创建新属性(比如 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值