挖洞经验 | 通过谷歌广告越权获取Youtube私享视频图像帧
字数 1170 2025-08-15 21:33:21

YouTube私享视频图像帧越权获取漏洞分析报告

漏洞概述

本报告详细分析了一个通过Google Ads平台越权获取YouTube私享(Private)视频图像帧的安全漏洞。攻击者利用该漏洞可以获取知晓视频ID的任何YouTube私享视频的所有图像帧,从而能够完整拼凑出整个视频的视觉内容。该漏洞最终获得了Google官方5000美元的漏洞奖励。

漏洞背景

YouTube视频有三种隐私权限设置:

  1. 公开(Public):任何人可以发现并观看
  2. 不公开(Unlisted):只有知晓视频ID或URL链接的用户才能观看
  3. 私享(Private):只有上传者或授权用户才能观看

漏洞发现过程

初始测试

  1. 使用第二个YouTube账户上传测试视频,设置为私享(Private)权限
  2. 尝试用第一个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参数:视频ID
  • 2参数:标记时间的毫秒数
  • 3参数:未知用途

漏洞利用

  1. 将请求中的视频ID替换为其他账户的私享视频ID
  2. 服务器返回目标视频在指定时间点的缩略图base64编码
  3. 使用base64转图像工具解码获取实际图像帧

自动化利用

研究者编写Python脚本实现自动化获取:

  1. 假设视频为24FPS,每帧间隔33毫秒
  2. 从0毫秒开始,以33毫秒为间隔连续获取图像帧
  3. 成功获取并还原了测试视频前3秒的所有图像帧

漏洞限制

  1. 必须知晓目标视频ID:需要预先获得私享视频的ID
  2. 仅能获取图像信息:无法获取视频中的音频内容
  3. 分辨率较低:获取的图像帧分辨率不高,但足以观看

漏洞修复建议

  1. Google Ads服务在请求YouTube视频资源时应进行与主站相同的权限验证
  2. 对跨服务API调用实施严格的访问控制检查
  3. 限制低权限服务获取高权限内容的可能性

经验总结

  1. 测试思路:当直接测试受阻时,考虑测试相关交互服务
  2. 功能探索:全面了解目标系统的各项功能,不放过任何可操作点
  3. 意外发现:重大漏洞往往存在于大多数人想象不到的地方

时间线

  • 2019年底:漏洞发现和测试
  • 2021年1月13日:漏洞细节公开披露
  • 漏洞奖励:Google官方奖励5000美元

参考资源

原始漏洞报告:xdavidhu
编译整理:clouds

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出现时间 获取视频特定时刻的缩略图 漏洞请求 当标记视频时,会发送以下关键请求: 其中: 1 参数:视频ID 2 参数:标记时间的毫秒数 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