前言
我要告诉大家的是,在没有得到你同意的情况下,目前大多数主流的网络平台都会泄漏你的登录状态。无论你当前是否进行了登录操作,攻击者都可以检测到你电脑登录了那些网络平台。而且目前有很多平台可以提供人口统计以及个性分析之类的服务,所以攻击者也可以就此推测出你的人物特性。
演示站点:【点我访问】
技术分析
对于绝大多数的平台而言,它们都可以利用登录机制来检测用户是否登录了自己的网络服务。虽然这个漏洞已经存在多年了,而且这也是一个众所周知的漏洞,但是目前大多数公司似乎并不打算去修复它。
需要注意的是,这个漏洞的利用方法非常简单,而且修复这个漏洞也十分容易。接下来,我会以facebook.com为例子来给大家介绍这项技术的工作原理。
登录重定向机制是如何工作的?
首先,我们要了解什么是登录重定向机制。假设你已经登录并正在访问https://www.facebook.com/bookmarks/pages这个页面。
现在,在一个单独的网页标签中访问这个URL地址,此时你在这个网页标签中并没有进行登录操作,因此你会被下面这个URL地址重定向至网站服务的登录页面:
https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages
请注意上述URL地址中的next参数,该参数的值如下:
https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages
我们就是从该参数中的这个地址跳转过来的,当我们完成了登录操作之后,上面的这个URL会将我们重定向至之前我们所要访问的那个页面。
如果我们现在已经登录了,那么在一个新的浏览器页面标签下访问这个URL地址(https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages),那么浏览器会直接将我们定向至这个页面。所以我们可以得出结论:
1. 如果你已经登录了:URL将返回next参数中的地址;
2. 如果你没有登录:URL将返回网站服务的登录页面;
绕过同源策略
这个URL地址有什么用呢?同源策略可以防止我们从除了https://facebook.com之外的其他域读取这个请求所返回的结果。
同源策略对于html页面来说是非常严格的,但是它允许我们从其他域接收图片资源。所以,如果next参数中的资源是图片资源的话,我们就可以从自己的网站来读取这部分数据了。Facebook只会检测URL地址中next参数的值是否以https://facebook.com开头,所以我们只需要在Facebook的网站中找一张图片文件就可以了。这应该没什么困难吧?其实,这确实有点难!因为Facebook网站中的图片全部托管在域名fbcdn.net。但是还有一张图片几乎是所有Web服务器中都会有的,那就是favicon.ico!
下面给出的就是将网站图标作为next参数时的URL地址:
https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico
这是一个非常有意思的URL地址:
1. 如果你已经登录了:URL将返回网站图标;
2. 如果你没有登录:URL将返回网站服务的登录页面;
我们可以在自己网站中的某个<img>标签内使用这个URL地址:
<imgsrc="https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico">
这个<img>标签的属性如下:
1. 如果你已经登录了:你将会接收到网站图标,HTML页面会自动加载这个图片资源,并自动触发onLoad回调事件;
2. 如果你没有登录:你将会接收到网站的登录页面,图标资源会加载失败,并自动触发onError回调事件;
最终的漏洞利用代码如下所示:
<img onload="alert(‘logged in to fb‘)"onerror="alert(‘not logged in to fb‘)"src="https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico">
其他平台
这项技术适用于目前绝大多数主流的网络平台,因为很多服务提供商在他们的登录地址中都添加了重定向参数,而且他们也需要在主机中托管网站的图标资源。
更新信息
2016/10/07:Instagram移除了网站根目录下的图标文件,并将其转移至了他们的CDN中。
2016/10/14:Stackoverflow已经修复了这个问题。
2016/10/14:火狐浏览器似乎也修复了这个问题。因为当我们使用新版火狐浏览器访问测试页面时,我们接收到了如下图所示的错误信息:
2016/10/14:Netflix通过将页面重定向至网站主页面以修复这个问题。
这项技术的可利用性和缓解方案
攻击者还可以在去匿名化技术、点击劫持攻击和网络钓鱼攻击中使用这项技术。这样一来,将会给用户带来更大的损失。
因此,为了缓解这个问题所带来的影响,首先就是要禁用所有的第三方cookie。除此之外,你也可以安装类似Privacy Badger和uMatrix这样的浏览器插件来保护你免受此类攻击。