本文通过谷歌广告中的视频制作功能,作者发现了Youtube私享(Private)视频图像帧的越权获取漏洞,利用该漏洞可以获取知晓视频ID号的任意Youtube私享(Private)视频的所有图像帧,从而可完整拼凑出整个视频图像信息。漏洞最终获得了谷歌官方$5k的奖励。
漏洞测试
2019年底的时候,我参与了YouTube的漏洞众测,在此过程中我尝试去测试对他人未授权视频的获取。当用户上传视频到YouTube时,可以对上传视频选择三种隐私权限。公开(Public)-即任何人可以发现并观看该视频;不公开(Unlisted)-只有知晓该视频ID或URL链接的用户才能观看该视频;私享(Private)-只有上传者自己或是其他授权者才能观看该视频。
首先,我用我的第二个Youtube账户进行了视频上传,并把该视频权限设置为私享(Private),然后以该视频为对象进行测试。如果我用我另一个Youtube账户获取到该视频,那么,漏洞就存在了。
然后,我登录了我的第一个Youtube账户,对上传视频流程相关的功能进行了反复测试,之后,我发现了一个包含视频ID(video ID)HTTP请求,此时我的直观思路就是能否把该视频ID替换成另一个账户中上传的私享视频ID,这样看看会有什么反应?但一番操作后完全不行。Youtube主站点会对请求中的视频执行权限检查,因此,最后的响应一直返回’This video is private’。
因此,这里需要转变一下思路。可以这样想想,看看是否有其它产品/服务是否会从内部去调用YouTube视频,或者说与YouTube上传的视频有交互关系。如果有,那么在其中的机制中可能会有一些脆弱性环节。之后,我发现了一个有意思的服务平台-Google Ads(谷歌广告),广告商可以通过该平台使用包括YouTube在内的等多种谷歌服务来创建广告页面。
漏洞线索发现
接下来,我就创建了一个Google Ads(谷歌广告)账户,它将播放我的一个视频,作为YouTube用户的可跳过广告。在该广告的制作过程当中,我还是用之前上传的私享视频做为测试目标,但是几经尝试,还是没能发现可利用的线索。广告制作完成后,我看了一下Google Ads的各种功能,发现它当中的功能非常全面,为此我着重看了一下它其中与YouTube相当的功能。
Google Ads中有一个叫Videos的页面,从中可以看到广告用到的相关视频列表。当点击其中的某个视频时,会打开一个针对该视频的特定分析(Analytics )功能。广告制作者可以通过该分析功能中内嵌的播放器、数据和一个叫Moments(片刻)的有意思功能,了解广告视频的点击情况,并可通过其Moments(片刻)功能标记视频,设置某些广告Logo的出现时间等。
当我标记视频的时候,从burp抓包流量中发现了以下包含视频ID的请求包:
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"}
在__ar参数中,1的参数值为视频ID,2的参数值为标记时间的毫秒时间。该请求的响应为广告视频中标记时刻的缩略图base64编码。这里,我想到的当然是把该POST请求中的视频ID替换我之前另一个Youtube账户中上传的,权限为私享(Private)的视频的ID。果然,让我吃惊的是,这种视频ID替换之后,竟然能成功返回相关视频的base64编码!我赶紧在谷歌上查找“base64 to image”工具,通过一个相关工具,我成功地获取了我另一个Youtube账户中上传的私享(Private)视频缩略图!哈哈,成功了!这是一个典型的IDOR越权漏洞,可以通过该漏洞利用获取Youtube上任意私享(Private)视频的任意图像帧,当然最终也能完全拼凑出一个完整的视频来!
好吧,现在的漏洞利用只能对单独的图像帧进行获取,能否获取更多的东西呢?之后,我决定通过Python脚本来进行更多图像帧获取。假如目标视频的每秒传输帧数为24FPS,那么每个图像帧驻屏时间为33毫秒。那么,这样我就能从0毫秒进行获取,通过33毫秒的间隔图像帧获取,就能获取到完整的目标视频了。我快速地编写了一个POC脚本,下载了目标视频中前3秒图像,经解码还原,与目标测试视频完全相同。
该漏洞隐患确实严重,但还是存在以下利用限制:
1、必须知晓目标私享视频的视频ID号,不过在大量数据泄露中,该漏洞也许就能派上用场了;
2、只能获取到目标私享视频的图像信息,不能获取到其中的音频信息;
3、获取到的目标私享视频图像信息分辨率较低,但也不影响观看。
经验总结
当在测试中碰壁时,可以转变思路,看看周边产品或服务是否与当前系统有交互调用;认真细致地去了解目标系统或应用的功能特性,尽量多的去测试一些相关功能,不要放过任何可执行操作。意外总会发生在大多数人想像不到的地方。
漏洞上报和处理进程
2019.12.11 – 漏洞上报
2019.12.11 – 漏洞分类
2019.12.20 – 漏洞接收(P4 -> P1)
2020.1.8 – 漏洞‘片刻’Moments功能修复
2020.1.17 – 漏洞奖励$5000发放
参考来源:xdavidhu,编译整理:clouds,转载请注明来自Freebuf.com
来源:freebuf.com 2021-01-13 18:34:19 by: clouds
请登录后发表评论
注册