- A+
这篇Writeup分享的是Facebook CDN系统的文件下载漏洞,Facebook CDN平台中的文件名会被以某种加密方法进行编码,当发生请求调用或下载时则指向一个加密字符串作为代替,作者通过破解了这种加密方法,可以任意修改其中与文件名对应的加密串,从而实现CDN系统中文件下载。该漏洞影响Facebook多个公开和内部CDN文件托管平台,以下是相关分享。
这篇Writeup分享的是Facebook CDN系统的文件下载漏洞,Facebook CDN平台中的文件名会被以某种加密方法进行编码,当发生请求调用或下载时则指向一个加密字符串作为代替,作者通过破解了这种加密方法,可以任意修改其中与文件名对应的加密串,从而实现CDN系统中文件下载。该漏洞影响Facebook多个公开和内部CDN文件托管平台,以下是相关分享。
漏洞说明
Facebook平台中被选中下载的文件在被执行某种加密算法之后,会以一个加密字符串进行代替。我可以decode这种加密算法并对其生成的加密串进行修改,以指向任意我想下载的文件。目前,这种加密算法广泛应用于Facebook各平台中,考虑到Facebook正在实施修复,在此我就不作过多破解方法透露,待修复完成再做详细讨论。
漏洞复现
Facebook平台基于一些内容分发网络(CDN)来实现用户上传的海量文件存储和分发,这些文件通常包含图片、视频和文档等等。这里,就拿Facebook 的公开CDN系统 scontent.*.fbcdn.net来说,它代表了以scontent开头的一类CDN系统,它负责托管用户上传的大量文件。我们可以先来看看这类CDN系统的托管文件样式:
https://scontent.ftun12-1.fna.fbcdn.net/v/t39.2365-6/21276262_1737282336573228_8492096834724954112_n.jpg?_nc_cat=108&oh=4e4c1ebd627f4a10dbbb3dd05a898499&oe=5D665C03
也就是说,通过这个链接可以下载到其中相关的.jpg文件21276262_1737282336573228_8492096834724954112_n.jpg,注意,这个下载链接中,其jpg文件名或文档ID(file id)为21276262_1737282336573228_8492096834724954112是一个加密串,另外,“oe” 和 “oh”参数对下载文件形成了一个签名,这两个签名参数会随时间和文件权限而改变,目的在于防止对CDN系统的未授权破力枚举下载文件。
拿上述CDN的下载文件21276262_1737282336573228_8492096834724954112_n.jpg来说,经我测试发现,Facebook移动用户可以在Facebook服务端https://lookaside.facebook.com/redrawable/下,通过构造包含有指向下载文件加密串21276262_1737282336573228_8492096834724954112的请求,就能从Facebook的CDN系统scontent.ftun12-1.fna.fbcdn.net中下载到对应文件。因为我已成功破解了Facebook的这种文档ID加密方法,所以,我可以尝试修改这个文档ID加密串以指向其它文件(如音视频文档),实现Facebook CDN系统中的任意托管文件下载。
之后,我把这种方法稍做修改,竟然能成功从Facebook的一些内部(非公开直接访问)CDN系统如interncache-*.fbcdn.net,获取到一些文件,这些文件涉及到了Facebook的部份敏感源代码,以及移动端用户的APP应用崩溃日志等。其中这些内部文件的相关文档ID信息可从一些Facebook开源项目的提交内容中去查找,当然,也可以通过对比分析之前不同版本的Facebook移动APP程序来发现。待Facebook完全修复该漏洞之后,我会再对技术细节做详细披露。
漏洞上报进程
2019.3.26 漏洞初报
2019.4.15 Facebook承认漏洞
2019.4.16 Facebook着手修复漏洞
2019.4.29 Facebook奖励我12500$美金
相关Facebook CDN漏洞,还可参考《Facebook CDN服务器的XSS漏洞 》。
*参考来源:ysamm,clouds编译,转载请注明来自FreeBuf.COM