挖洞经验 | Facebook CDN系统中的文件下载漏洞
字数 1399 2025-08-18 11:38:41
Facebook CDN系统文件下载漏洞分析报告
漏洞概述
本报告详细分析了Facebook CDN系统中存在的一个高危文件下载漏洞,该漏洞允许攻击者通过破解文件名加密算法,实现对CDN系统中任意文件的未授权下载。漏洞影响范围包括Facebook多个公开和内部CDN文件托管平台。
技术背景
Facebook CDN系统架构
Facebook使用内容分发网络(CDN)来存储和分发用户上传的文件,主要包括:
- 公开CDN系统:
scontent.*.fbcdn.net - 内部CDN系统:
interncache-*.fbcdn.net
这些CDN系统托管了各类用户文件,包括图片、视频、文档等。
文件访问机制
正常情况下,Facebook CDN系统中的文件访问通过加密字符串实现,而非直接使用原始文件名。典型文件URL结构如下:
https://scontent.ftun12-1.fna.fbcdn.net/v/t39.2365-6/21276262_1737282336573228_8492096834724954112_n.jpg?_nc_cat=108&oh=4e4c1ebd627f4a10dbbb3dd05a898499&oe=5D665C03
URL关键组成部分:
- 文件ID(加密串):
21276262_1737282336573228_8492096834724954112 - 签名参数:
oh:哈希值,用于验证oe:过期时间戳
漏洞原理
核心问题
Facebook使用某种加密算法将原始文件名转换为加密字符串,攻击者成功破解了这种加密方法,能够:
- 解码现有文件ID加密串
- 修改加密串指向其他文件
- 构造新的有效文件请求
漏洞利用路径
- 加密算法破解:研究者逆向工程了文件名到加密串的转换算法
- 文件ID操纵:通过修改加密串中的特定部分,可以指向其他文件
- 签名绕过:系统对
oh和oe参数的验证机制存在缺陷
漏洞复现步骤
公开CDN系统利用
-
获取一个有效文件URL,如:
https://scontent.ftun12-1.fna.fbcdn.net/v/t39.2365-6/21276262_1737282336573228_8492096834724954112_n.jpg -
提取文件ID:
21276262_1737282336573228_8492096834724954112 -
使用破解的算法解码该文件ID
-
修改文件ID指向目标文件
-
通过Facebook服务端点构造请求:
https://lookaside.facebook.com/redrawable/[修改后的文件ID] -
系统会将请求重定向到CDN获取指定文件
内部CDN系统利用
-
从Facebook开源项目或移动APP历史版本中收集内部文件ID
-
使用相同方法修改文件ID
-
针对内部CDN端点发起请求:
https://interncache-*.fbcdn.net/[修改后的文件ID]
影响范围
受影响系统
- 公开CDN:
scontent.*.fbcdn.net - 内部CDN:
interncache-*.fbcdn.net
潜在风险
- 任意文件下载:可获取用户上传的私人文件
- 内部数据泄露:可访问内部CDN中的敏感信息,包括:
- Facebook部分源代码
- 移动端用户APP崩溃日志
- 其他内部文档
修复建议
临时缓解措施
- 加强
oh和oe参数的签名验证机制 - 限制文件ID的有效期
- 实施更严格的访问控制策略
长期解决方案
- 替换现有的文件名加密算法
- 实施基于上下文的访问控制
- 增加请求来源验证机制
时间线
- 2019.3.26:漏洞初报
- 2019.4.15:Facebook承认漏洞
- 2019.4.16:Facebook开始修复
- 2019.4.29:漏洞奖励$12,500
总结
该漏洞展示了CDN系统设计中加密机制的重要性,特别是在处理敏感文件时。通过破解文件名加密算法,攻击者可以绕过正常的访问控制机制,获取未授权的文件访问权限。这提醒我们在设计类似系统时,需要:
- 使用强加密算法保护资源标识符
- 实施多层防御机制
- 定期审查和更新安全机制
由于Facebook已修复该漏洞,具体加密算法破解细节未完全公开,以防止被恶意利用。