キャラクター倒すとリモートコード実行が可能になるSource Engineの脆弱性
2017年7月23日 16:27
ゲーム内キャラクターを倒すことでリモートからのコード実行が可能となるValveのSource SDKの脆弱性について、発見したOne Up Securityが解説している(One Up Securityの記事、The Vergeの記事)。 脆弱性が存在するのは倒されたキャラクターに適用されるラグドールモデルの処理に関する部分だ。Source Engineではマップファイルにカスタムコンテンツを格納することでユーザーがマップにコンテンツを追加できる。ラグドールモデルファイルをオリジナルと同じリソースパスでマップファイルに格納すれば、オリジナルを置き換えることが可能となる。 ラグドールモデルのルールはトークン化して読み込まれるが、トークン化の際に適切な境界チェックが行われない。そのため、特別に細工したラグドールデータを読み込ませるとバッファーサイズを超えるトークンが生成され、バッファーオーバーフローが発生する。さらにsteamclient.dllではASLRが有効になっていないため、メモリーアドレスは予測可能だという。PoCは30日以内の公開が予告されており、Shell32.dllを読み込ませてcmd.exeを実行するものとのこと。 報告を受けたValveでは、Counter Strike: Global OffensiveやTeam Fortress 2、Half-Life 2: Deathmatch、Portal 2、Left 4 Dead 2などの修正を行い、パッチの提供を6月に開始している。