挖洞经验 | 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使用某种加密算法将原始文件名转换为加密字符串,攻击者成功破解了这种加密方法,能够:

  1. 解码现有文件ID加密串
  2. 修改加密串指向其他文件
  3. 构造新的有效文件请求

漏洞利用路径

  1. 加密算法破解:研究者逆向工程了文件名到加密串的转换算法
  2. 文件ID操纵:通过修改加密串中的特定部分,可以指向其他文件
  3. 签名绕过:系统对ohoe参数的验证机制存在缺陷

漏洞复现步骤

公开CDN系统利用

  1. 获取一个有效文件URL,如:

    https://scontent.ftun12-1.fna.fbcdn.net/v/t39.2365-6/21276262_1737282336573228_8492096834724954112_n.jpg
    
  2. 提取文件ID:21276262_1737282336573228_8492096834724954112

  3. 使用破解的算法解码该文件ID

  4. 修改文件ID指向目标文件

  5. 通过Facebook服务端点构造请求:

    https://lookaside.facebook.com/redrawable/[修改后的文件ID]
    
  6. 系统会将请求重定向到CDN获取指定文件

内部CDN系统利用

  1. 从Facebook开源项目或移动APP历史版本中收集内部文件ID

  2. 使用相同方法修改文件ID

  3. 针对内部CDN端点发起请求:

    https://interncache-*.fbcdn.net/[修改后的文件ID]
    

影响范围

受影响系统

  • 公开CDN:scontent.*.fbcdn.net
  • 内部CDN:interncache-*.fbcdn.net

潜在风险

  1. 任意文件下载:可获取用户上传的私人文件
  2. 内部数据泄露:可访问内部CDN中的敏感信息,包括:
    • Facebook部分源代码
    • 移动端用户APP崩溃日志
    • 其他内部文档

修复建议

临时缓解措施

  1. 加强ohoe参数的签名验证机制
  2. 限制文件ID的有效期
  3. 实施更严格的访问控制策略

长期解决方案

  1. 替换现有的文件名加密算法
  2. 实施基于上下文的访问控制
  3. 增加请求来源验证机制

时间线

  • 2019.3.26:漏洞初报
  • 2019.4.15:Facebook承认漏洞
  • 2019.4.16:Facebook开始修复
  • 2019.4.29:漏洞奖励$12,500

总结

该漏洞展示了CDN系统设计中加密机制的重要性,特别是在处理敏感文件时。通过破解文件名加密算法,攻击者可以绕过正常的访问控制机制,获取未授权的文件访问权限。这提醒我们在设计类似系统时,需要:

  1. 使用强加密算法保护资源标识符
  2. 实施多层防御机制
  3. 定期审查和更新安全机制

由于Facebook已修复该漏洞,具体加密算法破解细节未完全公开,以防止被恶意利用。

Facebook CDN系统文件下载漏洞分析报告 漏洞概述 本报告详细分析了Facebook CDN系统中存在的一个高危文件下载漏洞,该漏洞允许攻击者通过破解文件名加密算法,实现对CDN系统中任意文件的未授权下载。漏洞影响范围包括Facebook多个公开和内部CDN文件托管平台。 技术背景 Facebook CDN系统架构 Facebook使用内容分发网络(CDN)来存储和分发用户上传的文件,主要包括: 公开CDN系统: scontent.*.fbcdn.net 内部CDN系统: interncache-*.fbcdn.net 这些CDN系统托管了各类用户文件,包括图片、视频、文档等。 文件访问机制 正常情况下,Facebook CDN系统中的文件访问通过加密字符串实现,而非直接使用原始文件名。典型文件URL结构如下: URL关键组成部分: 文件ID(加密串): 21276262_1737282336573228_8492096834724954112 签名参数: oh :哈希值,用于验证 oe :过期时间戳 漏洞原理 核心问题 Facebook使用某种加密算法将原始文件名转换为加密字符串,攻击者成功破解了这种加密方法,能够: 解码现有文件ID加密串 修改加密串指向其他文件 构造新的有效文件请求 漏洞利用路径 加密算法破解 :研究者逆向工程了文件名到加密串的转换算法 文件ID操纵 :通过修改加密串中的特定部分,可以指向其他文件 签名绕过 :系统对 oh 和 oe 参数的验证机制存在缺陷 漏洞复现步骤 公开CDN系统利用 获取一个有效文件URL,如: 提取文件ID: 21276262_1737282336573228_8492096834724954112 使用破解的算法解码该文件ID 修改文件ID指向目标文件 通过Facebook服务端点构造请求: 系统会将请求重定向到CDN获取指定文件 内部CDN系统利用 从Facebook开源项目或移动APP历史版本中收集内部文件ID 使用相同方法修改文件ID 针对内部CDN端点发起请求: 影响范围 受影响系统 公开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已修复该漏洞,具体加密算法破解细节未完全公开,以防止被恶意利用。