YouTubeの「埋め込みプレイヤー」から再生履歴や非公開のムービーが流出する脆弱性
YouTubeには他のウェブサイトにYouTubeのムービーを再生するプレイヤーを埋め込めるHTMLタグを出力する機能があります。埋め込みプレイヤーはムービーの再生や停止といった操作の他に、再生リストなどにもアクセスできる便利な存在。しかし、そんなYouTubeの埋め込みプレイヤーに「再生履歴や非公開のムービー」が漏えいする脆弱(ぜいじゃく)性があったと、発見者であるDavid Schütz氏が語っています。
bugs.xdavidhu.me - xdavidhu's bug bounty writeups.
https://bugs.xdavidhu.me/google/2021/01/18/the-embedded-youtube-player-told-me-what-you-were-watching-and-more/
YouTubeアカウントには「再生履歴」リスト、「後で見る」リスト、「お気に入り」リスト、「アップロード」リストが存在していますが、Schütz氏はこれらのリストのURLが「推測可能」な状態であったことを発見。例えば、アップロードしたムービーが含まれるアップロードリストは、チャンネルを表示するURL「https://www.youtube.com/channel/チャンネルID」のチャンネルID部分について、最初の三文字を「UUB」か「UUD」に変えることでアクセスできたとのこと。
アカウントに未ログインの場合、アップロードリストに関して「公開済み」のムービーにしかアクセスできなかったため、リストのURLを推測可能なだけなら非公開のムービー流出の可能性はありませんでした。しかし、Schütz氏はYouTubeの「埋め込みプレイヤー」から、プレイヤーを再生した人のアカウントにログインした状態を作り出せることも発見しました。
YouTubeのムービーはウェブサイト内に埋め込みプレイヤーとして設置でき、設置したプレイヤーはYouTube Player APIを用いたJavaScriptによる制御が可能です。YouTube Player APIは「YouTube」と「埋め込み先のウェブサイト」間のクロスドメイン通信をpostMessageメソッドで行っており、API内のplayVideoメソッドやpauseVideoメソッド、getPlaylistメソッドなど、ムービーの再生、停止、リスト内のムービー取得といった操作が可能となっています。
Schütz氏がYouTubeのハックに取り掛かっていた当時、YouTube Player APIにはプレイリスト内のムービーの情報を取得できるgetVideoDataメソッドが存在していたとのこと。getVideoDataメソッドで取得できるVideoDataオブジェクトには、ムービーのIDや作成者、タイトルといった情報が含まれていました。さらに、プレイヤーを再生した人がYouTubeにログインしていた場合、埋め込みプレイヤーもログイン状態となるため、埋め込みプレイヤーはアカウントへのフルアクセス権限が与えられていました。
このため、ウェブサイトにYouTubeの埋め込みプレイヤーを設置し、YouTube Player APIのメソッドと推測したURLを組み合わせれば、非公開のムービーにもアクセス可能な状態でした。
この脆弱性が発見されたのは2019年10月で、記事作成時点で修正済みとなっています。Schütz氏は脆弱性の報奨金としてGoogleから1337ドル(約13万4000円)を受け取りましたが、「今思えば、脆弱性が与える影響にしては報奨金が少なかったように思う」と当時の報奨金額を振り返るとともに、「システムを理解すればするほど、その壊し方のアイデアが浮かんでくる」と語っています。
・関連記事
YouTubeを見た11万人以上がマルウェアに感染、原因は「広告」 - GIGAZINE
1億円を報奨金で稼いだ「バグハンター」が登場、4年のキャリアで報告した欠陥の数は1600以上 - GIGAZINE
Appleをスゴ腕の「バグハンター」たちが3カ月間ハックすると賞金はいくら稼げるのか? - GIGAZINE
「バグ報奨金の稼ぎ方」が少しわかりそうな「Facebookに存在するバグ脆弱性レポート」 - GIGAZINE
Facebookのバグ報奨金プログラムが10周年、現在地点とこれからをセキュリティ責任者が語る - GIGAZINE
・関連コンテンツ