挖洞经验 | 通过谷歌广告越权获取Youtube私享视频图像帧
字数 1170 2025-08-15 21:33:21
YouTube私享视频图像帧越权获取漏洞分析报告
漏洞概述
本报告详细分析了一个通过Google Ads平台越权获取YouTube私享(Private)视频图像帧的安全漏洞。攻击者利用该漏洞可以获取知晓视频ID的任何YouTube私享视频的所有图像帧,从而能够完整拼凑出整个视频的视觉内容。该漏洞最终获得了Google官方5000美元的漏洞奖励。
漏洞背景
YouTube视频有三种隐私权限设置:
- 公开(Public):任何人可以发现并观看
- 不公开(Unlisted):只有知晓视频ID或URL链接的用户才能观看
- 私享(Private):只有上传者或授权用户才能观看
漏洞发现过程
初始测试
- 使用第二个YouTube账户上传测试视频,设置为私享(Private)权限
- 尝试用第一个YouTube账户直接访问该私享视频,YouTube主站会进行权限检查,返回"This video is private"错误
思路转变
当直接测试YouTube主站失败后,研究者转向测试与YouTube有交互的其他Google服务,最终在Google Ads平台发现突破口。
漏洞细节
关键发现点
在Google Ads平台的"Videos"页面中,存在一个"Moments(片刻)"功能,该功能允许广告制作者:
- 标记视频特定时间点
- 设置广告Logo出现时间
- 获取视频特定时刻的缩略图
漏洞请求
当标记视频时,会发送以下关键请求:
POST /aw_video/_/rpc/VideoMomentService/GetThumbnails HTTP/1.1
Host: ads.google.com
User-Agent: Internet-Explorer-6
Cookie: [redacted]
__ar={"1":"kCTeqs1F4ME","2":"12240","3":"387719230"}
其中:
1参数:视频ID2参数:标记时间的毫秒数3参数:未知用途
漏洞利用
- 将请求中的视频ID替换为其他账户的私享视频ID
- 服务器返回目标视频在指定时间点的缩略图base64编码
- 使用base64转图像工具解码获取实际图像帧
自动化利用
研究者编写Python脚本实现自动化获取:
- 假设视频为24FPS,每帧间隔33毫秒
- 从0毫秒开始,以33毫秒为间隔连续获取图像帧
- 成功获取并还原了测试视频前3秒的所有图像帧
漏洞限制
- 必须知晓目标视频ID:需要预先获得私享视频的ID
- 仅能获取图像信息:无法获取视频中的音频内容
- 分辨率较低:获取的图像帧分辨率不高,但足以观看
漏洞修复建议
- Google Ads服务在请求YouTube视频资源时应进行与主站相同的权限验证
- 对跨服务API调用实施严格的访问控制检查
- 限制低权限服务获取高权限内容的可能性
经验总结
- 测试思路:当直接测试受阻时,考虑测试相关交互服务
- 功能探索:全面了解目标系统的各项功能,不放过任何可操作点
- 意外发现:重大漏洞往往存在于大多数人想象不到的地方
时间线
- 2019年底:漏洞发现和测试
- 2021年1月13日:漏洞细节公开披露
- 漏洞奖励:Google官方奖励5000美元
参考资源
原始漏洞报告:xdavidhu
编译整理:clouds