本文讲述了巴西14岁少年Andres Alonso发现的,存在于Instagram Spark AR滤镜应用中的一个开放重定向漏洞(Open redirect),通过构造还可形成存储型XSS,最终收获了Facebook官方奖励的$25,000。

漏洞测试

Facebook在Instagram上内置了Spark AR应用,用户可以在Instagram相机中搜索AR滤镜,实现照片和视频的AR创作。作者在把玩Instagram的Spark AR滤镜应用时发现,Instagram采用了Facebook的滤镜功能,可以通过发送不同滤镜主题链接方式在Instagram中应用,因此,作者着重针对其中生成的滤镜链接(filter links )进行了分析:

当Instagram首次生成滤镜链接时,其请求中包含了名称name、文件类型file type和滤镜文件.arexport的大小。通常来说,该滤镜的预览文件名称为preview.arexport,且无法通过Spark AR应用进行更改,但当我测试后发现,如果我设法更改了该滤镜预览文件名称后,其滤镜通知信息中也会发生相应的更改变化。

此时,我就自然而然地想到了向其中插入XSS或其它攻击代码,但尝试之后,攻击代码不能有效执行。-------之后,我就转到桌面版应用中测试,但是在网页中没发现具体的滤镜通知相关信息:

但通过在网页源码中发现,我测试的XSS Payload滤镜名称存在于其两个meta标签中:

为此,我尝试在其中加入XSS代码,虽然无法使用HTML代码中的开合符号,但我可以用双引号把其内容形成闭合:

不幸的是,由于其meta标签的限制性,最终我的XSS尝试还是无效,我只能引入闭合双引号,接下来,我又尝试去测试开放重定向跳转。我对URL进行了以下编码:

http://www.evilzone.com

然后把它放到成型的URL中:

0;url=http://www.evilzone.com"HTTP-EQUIV="refresh"any=".arexport

这次成功了,可以把用户跳转到另外一个页面www.evilzone.com中去。

漏洞提升

漏洞上报后,Facebook安全团队又对我的漏洞进行了评估测试,经他们构造,可以形成一个完美的Stored XSS,他们是这样说的:

Although your original report is about an open redirect issue, we further investigated and found that it could be escalated to XSS.

他们构造的Stored XSS Payload如下:

<meta charset="x-imap4-modified-utf7">&ADz&AGn&AG0&AEf&ACA&AHM&AHI&AGO&AD0&AGn&ACA&AG8Abg&AGUAcgByAG8AcgA9AGEAbABlAHIAdAAoADEAKQ&ACAAPABi

最终,我幸运地收获了Facebook官方奖励的$25,000。

参考来源:medium

本文作者:clouds, 转自FreeBuf