我来分享一个Facebook旗下公司Oculus网站存在的类似XSS漏洞,该漏洞最终获得了Facebook官方$1500美金的奖励。
Facebook在2014年3月宣布以20亿美元收购虚拟现实(VR)头戴设备制造商Oculus,Facebook计划将Oculus的VR技术优势扩大至新的垂直领域,如通信、媒体和娱乐、教育及其他领域等。
Oculus发布了定制化开源的开发者项目( Custom Developer Items),这项功能已向社区开发者推送。无论你是开发虚拟现实游戏、社交体验、娱乐还是教育类应用,都可以使用自己最喜欢的游戏引擎或我们的原生 SDK 轻松地在整个 Oculus 平台上进行开发。它覆盖了Oculus Rift + Touch 、Oculus Go 和 Samsung Gear VR + 控制器的VR产品,与主流开源的VR开发工具Unity结合,用户可以定制化地开发属于自己的应用。
在Oculus网站的账户管理页面https://dashboard.oculus.com/,注册并登录账户后,有一个服务端功能允许开发者上传应用相关的asset资源文件,且所有asset资源文件都储存在了”oculuscdn.com”网站中。例如,我们用该服务端功能上传一个图片文件时,其发送的POST请求如下:
POST /upload_image/ HTTP/1.1
Host: graph.oculus.com
multipart/form-data
之后,oculuscdn.com返回的响应如下:
HTTP/1.1 200 OK
{
“id”: “1234567890012345”,
“handle”: “HANDLE_TO_THE_IMAGE”,
}
其中包含了图片的ID号,称呼Handle和具体的访问链接URL。可以看到,我们POST请求主机graph.oculus.com,Response中响应的主机为scontent.oculuscdn.com。这里存在的漏洞就比较简单了,不需要像之前facebook cdn的那样需要进行cname域名替换,这里直接把 /v/ 和HASH串去掉,就能访问到目标图片了。整个测试过程如下:
上传PNG图片,用BurpSuite拦截抓包;
拦截到上传的PNG图片内容,把恶意的带XSS Payload的js外链添加在其末尾;
成功上传后,从响应内容中提取出图片上传后的具体访问URL链接;
然后,把URL中的 “/v/” 和 HASH串去掉去掉,再把上传图片的后缀格式由.jpg改为.html,就能成功加载之前添加进入的js恶意Payload了。
这里,我用到的带XSS Payload的js外链为:
最终的请求链接如下:
https://scontent.oculuscdn.com/t64.5771-25/12410200_1905973632996555_3168227744525844480_n.html
该漏洞允许攻击者在Oculus CDN服务器上执行任意JS文件,好在有沙盒防护机制,其不能读取用户的cookies/session信息,但应用在实际的攻击场景中,该漏洞可以绕过Facebook的链接黑名单系统 Linkshim,也能用其实施钓鱼行为。
2018.3.19: 漏洞初报
2018.3.22: 技术详情提供
2018.3.22: Payload测试
2018.3.23: 漏洞有效性认可
2018.5.25: 漏洞修复
2018.6.1: $1500赏金发放
*参考来源:amolbaikar,clouds编译