从反序列化漏洞到掌控帝国:百万美刀的Instagram漏洞

Posted 红客联盟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从反序列化漏洞到掌控帝国:百万美刀的Instagram漏洞相关的知识,希望对你有一定的参考价值。

点击上方 “红客联盟”可以订阅哦!
0x00 前言

2012年,Blloberg在Facebook白帽子奖励计划的网站上发表了一片著名的文章,文章中提到:“如果Facebook出了价值百万美刀的漏洞,我们也愿意照单全付”。在本文开始之前,我想为骗点击量的文章标题向各位道个歉,不过Facebook之前放的豪言是我写这篇文章的重要背景。经过一番尝试和努力,我确实发现了一个价值百万美刀的Instagram漏洞,该漏洞可以用来获取Instagram的源代码,照片和SSL证书等。

0x01 绝佳线索

去年,我曾对Facebook的安全性进行过一些小的测试,也取得了一些成果,所以我对于深入测试Facebook的整体业务安全性有着十分浓厚的兴趣。发现这个漏洞其实也要感谢我所在的公司能够允许我在非工作时间查找其他公司的漏洞,要不然根本没有这篇文章了。事情是这样的,我的一个朋友前段时间和我提到,他们正在测试作为Facebook漏洞奖励计划重要组成成分的Ins系统的安全性。他们发现Instagram存在一台有漏洞的Ruby服务器(https://sensu.instagram.com),我的朋友告诉我,这个漏洞已经被他提交到Facebook漏洞响应团队,漏洞分类是“内部管理后台对外”。在他向Facebook中提交的报告中提到,该后台可能存在一个Ruby密码重置漏洞由此可以被黑客利用登录进入后台,不过他并没有成功印证他的猜测。看到这个漏洞细节的第一眼,我就想起了CVE-2013-3221(http://ronin-ruby.github.io/blog/2013/01/28/new-rails-poc.html),不过鉴于他已经提交了这个漏洞,所以我朋友只是私下里让我帮他看看是不是能够深入利用这个线索,扩大漏洞影响,接触Instagram的核心数据。

0x02 Ruby(Rails)远程命令执行

基于之前朋友的漏洞报告细节,我尝试着查找可以重置这个Ruby应用密码的漏洞。不过初步的测试效果并不理想,一般的登录页面并不接受数值“0”作为密码,而且我也不知道要用什么办法才能发送一封密码重置邮件。我发现,Instagram的这个后台可能是用了开源的Sensu管理系统,于是我谷歌了关键词“Sensu-Admin”,但是一无所获。看起来,貌似我朋友的推测并不行。

不过惊喜的是,我发现了这个应用在Github上面有源代码,在该项目的目录中,我发现了secret_token.rb中泄露了Rails的私钥。我第一反应是,Facebook的程序员不会傻到把在搭建自己后台应用的时候不更改私钥吧?不过我还是想试试,因为如果尝试成功的话,那我就可以伪造seesion cookies,然后登陆后台了。我前面也提到CVE-2013-3221(http://ronin-ruby.github.io/blog/2013/01/28/new-rails-poc.html),这篇文章的作者指出,不仅仅cookies可以被伪造,而且因为Ruby Rails的反序列化漏洞,攻击者甚至可以直接构造远程代码执行攻击。

在尝试反序列化漏洞测试Instagram这个业务之前,我首先在本地进行了测试,我是用了下面这个测试框架:
https://github.com/charliesome/charlie.bz/blob/master/posts/rails-3.2.10-remote-code-execution.md

结果出人意料的好,我成功在本地复现了漏洞。所以,我使用相同的步骤,结合刚刚在Github上的发现,我向Instagram的Sensu-Admin管理后台服务器发送了如下的cookie:

(c)2006-2024 SYSTEM All Rights Reserved IT常识