Steamクライアントに脆弱性6件、同じアカウントにログインしたPC間でゼロクリックのコード実行も実証
SteamのWindows版クライアントで見つかった脆弱性は6件。セキュリティ企業Atredis Partnersが10月28日、研究者のBryan Alexander氏による調査結果を同社ブログの記事「Turning the Valve」で公開したにゃ。
内訳は、別のPCからプログラムを動かせるリモートコード実行(RCE)が2件と、PCの中で一般ユーザーが最上位のSYSTEM権限を得られるローカル権限昇格(LPE)が4件。どれもValveのバグ報奨金プログラム(HackerOne)を通じて報告済みで、公開した内容は「修正済みか、同社の開示期限を過ぎたもの」とされている。同社の開示ポリシーでは、ベンダーへ連絡してから公表するまでの標準の期限は90日だよ。
同じアカウントにログインした端末どうしの通信に穴があった
RCEの2件は、どちらも `steamclient64.dll` の中にある、同じSteamアカウントでログインしているクライアント同士がやり取りする仕組みで見つかった。記事によると、同じアカウントで認証されたSteamはほかの端末とそれぞれ接続を張り、状態を知らせるメッセージを送り合っているという。この通信は、Remote Playのペアリングのような追加の許可が無くても、ログインさえしていれば届くんだって。
問題があったのは、次の2種類のメッセージの受け取り処理。
- ダウンロード予定の変更通知: 予定に入ったアプリのリストを、上限を確かめずに固定サイズの領域へ書き写していた。要素をおよそ200個より多く送ると、あふれた分が処理の戻り先を書き換えてしまう
- アプリの状態通知(インストールやアップデートの進み具合): 進行状況の項目を7個ぶんの固定の配列へコピーしていて、8個以上あると同じようにあふれる
どちらもスタックバッファオーバーフローと呼ばれる種類の不具合だね。
情報漏えいと組み合わせて「ゼロクリック」に
あふれさせるだけでは、狙ったとおりにプログラムを動かすのは難しい。そこでAlexander氏は、もう1つの不具合を組み合わせた。ダウンロード予定の変更通知を送る側が、初期化していないメモリの中身を毎回32個ぶんそのまま載せて送っていて、そこから `steamclient64.dll` がメモリ上のどこに置かれているかを割り出せたんだ。
手順はこう組まれている。
- 1. 変更通知に紛れて漏れてくる値から、`steamclient64.dll` の位置を計算する
- 2. 状態通知のメッセージでバッファをあふれさせ、任意のプログラムを起動させる
- 3. 処理を終えたあとも、Steamがクラッシュしないようにスレッドだけを抜ける
漏えいは、相手のダウンロード予定が変わったときや接続した直後に起きるうえ、攻撃側から先に通知を送れば相手にも送り返させられる。だから標的側の利用者はリンクを踏む必要も、ファイルを開く必要もない。記事では、最新の状態のWindows 11を標的に、Windows 10の仮想マシンから実行して成功させる様子が動画で示されているにゃ。
ただし前提として、攻撃者が標的と同じSteamアカウントでログインしたクライアントを動かせることが要る。ネット上の不特定多数のPCを外から狙えるたぐいのものではない。逆に言えば、パスワードを盗まれるなどしてアカウントに入り込まれた場合、そこからログイン中の別のPCへ手が伸びうる、という性質の穴だった。
ローカル権限昇格の4件は、ゲームの依存ファイルのインストールなどを受け持つためSYSTEM権限で常駐している `steamservice.exe` 周辺に集中している。
| 種類 | 舞台になった部分 | 中身 |
|---|---|---|
| RCE | ダウンロード予定の変更通知 | アプリのリストを上限確認なしで固定領域へコピー |
| RCE | アプリの状態通知 | 進行状況を7個ぶんの固定配列へコピー |
| LPE | インストール用スクリプトの処理 | 一度許可したスクリプトの場所を、利用者が書き換えられるフォルダの実行ファイルに差し替えられる |
| LPE | モジュールの読み込み処理 | 利用者が書き込めるフォルダから、署名の確認なしで `steamservice.exe` を起動させられる |
| LPE | セキュアデスクトップの画面取り込み | UACの確認画面を読み取り、そこへ入力を送り込める |
| LPE | VR用ドングルのドライバー導入 | 想定外のドライバーをSYSTEM権限でインストールさせられる |
このうちLPEの2件は、ほかの人からの報告と重複していたという。さらにもう1件は、別の研究者がすでに公表していたとされる。どれがどれかまでは書かれていない。
記事には、報告した日付や修正が入った日付、影響を受けるSteamクライアントのバージョンといった情報は載っていない。「修正済みか、開示期限を過ぎたもの」という言い方も、6件のうちどれがどちらに当たるかは分けて書かれていないんだよね。Valveからの公式な説明も、10月31日の時点では出ていない。
利用者の側でできることは、Steamクライアントを最新に保つことと、RCEの前提になる「同じアカウントへのログイン」を許さないこと。パスワードの使い回しを避け、Steam Guardを有効にしておけば、ゼロクリックの2件はそもそも入り口が閉じたままになるにゃ。
関連記事
Steamハードの欧州配送業者に不正アクセス、購入者の氏名・住所などが流出の恐れ
欧州でSteamハードを扱う物流大手CEVAが7月29日から8月1日にかけて侵入を受け、Valveが購入者への通知を開始。パスワードや決済情報は対象外だが、注文を装った偽の連絡に注意が必要。
Steamストアが一時ダウン、PHPの深刻な脆弱性で『ウマ娘』『グラブル』も緊急メンテ
10月21日の夜、Steamのストアが一時的に開けなくなった。同じ夜、PHPに深刻度9.2の脆弱性が2件見つかり、国内のゲームや通販サイトも次々に緊急メンテナンスへ入ったにゃ。
暗号資産22万ドルを抜いたマルウェア入りSteamゲーム、FBIが21歳を訴追 ― 足がついたのはUber Eats
FBIが名指しした7本のSteamゲームに仕込まれていた情報窃取マルウェア。約8000台が感染し80のウォレットが開けられた一件で、ついに最初の訴追者が出たにゃ。

コメント (0)
最初のひとことをどうぞ🐈
感想でも「わかる」の一言でも大歓迎。あなたのコメントがこのページの一番乗りです。