Twitchのチャット1行が配信者のPCを乗っ取るまで
How one Twitch chat message became code execution on a streamer’s PC

OBSのBrowser Sourceで視聴者のチャットが無害化されずHTMLとして描画される脆弱性を突き、サンドボックス無効のChromiumとV8の既知の脆弱性CVE-2024-7971を組み合わせることで、Twitchのチャットメッセージ1つから配信者のマシン上で任意コード実行に至る攻撃チェーンを実証。OBSチームはCEFの更新とサンドボックス再有効化を進めている。
視聴者が送った1つの悪意あるTwitchチャットメッセージが、脆弱なオーバーレイによってJavaScript実行に変わり、V8エクスプロイトがそれをネイティブコード実行に変え、攻撃者は配信者のマシン上で任意のコードを実行するに至る。
HNでの議論
23- Scryptonite
デジャヴだ。何年か前に似たような問題を報告して修正してもらったことがある。同じくTwitchのチャットオーバーレイのXSSだったけど、その時は配信者が少なくともタグを除去しようとしていた(ただしPHPのstrip_tagsの出来の悪いJS実装だった)。そして、チャットオーバーレイをフリーズ/ハングさせるonload/onerror付きの画像を作るまで、配信者は問題を理解しなかった。
- doodlesdev
まったく馬鹿げている。こんな奇妙なエクスプロイトチェーンを許す開発者は永遠に嫌いだ。OBSはOSSプロジェクトで、長年にわたり多くの愛を受けてきたと思うが、特定のサービスとの認証が有効だと動かないからという理由でChromiumサンドボックスを無効にしているのは非常識だ。このプロジェクトに他にどんな脆弱性が待ち構えているか想像したくもない。
確かに、プラグイン開発者がコメントを挿入前にサニタイズしていれば、今回のような形にはならなかっただろう。しかし、2年も古いブラウザエンジンを使い(その理由は以前の他の状況と比べても絶対に妥当だと思うが)、Chromiumサンドボックスを完全に無効にし、代替も何もない状態で、人々がインターネットからランダムなプラグインを入れて適当な機能を得ようとするソフトウェアとしては正気の沙汰ではない。
この2つの変更が早くOBSに取り込まれることを願う。セキュリティ体制を更新してくれたら、今後は財政的に支援するかもしれない。私はOBSが全般的に大好きだから。
- superkuh
これは問題にならないはずだよね?JavaScriptは現代のどのブラウザでもデフォルトでPC上での実行が許可されている。未知でランダムなソースから任意のコードを盲目的に実行しない時代は遠い昔だ。今ではそれをしないと変わり者扱いされ、ウェブサイトを閲覧しようとしても実際には何も表示されない。
これはバグではない。これは現代のJSアプリケーション実行ベースの「ウェブ」の設計アーキテクチャ全体の意図だ。もしこれがウェブにとって正しい選択なら、全く問題ないはずだ。しかし、我々は皆それが問題だと知っている。アーキテクチャの選択がこれを強制している。ランダムなサードパーティコードを勝手に実行するのをやめるまで、これは常に起こる。そして、ブラウザのJS仮想マシンに裸のメタル機能がさらされるにつれて、結果はますます悪化するだろう。
自分が見たい世界の変化に自分自身がなれ。JavaScriptをオフにしろ。自分の下で勝手に変わらない本物のネイティブアプリケーションを使え。