無題大鵝模擬遊戲(Untitled Goose Game)存在程式碼可執行漏洞

  • 2019 年 12 月 5 日
  • 筆記

Untitled Goose Game(無題大鵝模擬、搗蛋鵝)是一款畫風簡單的第三人稱模擬類遊戲,通過模擬一隻大鵝去完成一些搗亂任務,是House House製作的一款農場題材搞笑遊戲。經作者發現,Untitled Goose Game由於在其遊戲存檔載入器(Save Game Loader)中存在不安全的反序列化機制從而可導致程式碼執行漏洞,攻擊者可以針對目標玩家的在啟動遊戲存檔載入器時實施惡意程式碼執行攻擊。

漏洞詳情

Untitled Goose Game使用.NET的BinaryFormatter去讀取和反序列化遊戲存檔文件,由於其中未採用特定的SerializationBinder去控制反序列化過程,因此,控制了遊戲存檔文件的攻擊者可以利用其反序列化過程來執行任意程式碼。攻擊者只需在遊戲存檔文件中寫入一個惡意的序列化對象,讓Untitled Goose Game去讀取即可實現攻擊。遊戲存檔文件在作業系統中的存儲位置為C:Users<USER>AppDataLocalLowHouse HouseUntitled Goose Gamesavegame0.save.

Untitled Goose Game中的反序列化過程發生在Untitled_DataManagedAssembly-CSharp.dll文件的StandaloneSaveSystem類中,以下是其中存在安全風險的方法函數:

public SaveGameData LoadSlot(int slot) {  string savePath = this.GetSavePath(slot);  SaveGameData result;  if (File.Exists(savePath))  {   Debug.Log("loading from " + savePath);   using (FileStream fileStream = File.Open(savePath, FileMode.Open))   {    result = (SaveGameData)new BinaryFormatter().Deserialize(fileStream);   }   Debug.Log("sucessfully loaded savegame data from " + savePath);  }  else  {   Debug.Log("savefile doesn't exist. didn't load any data");   result = new SaveGameData();  }  return result; }

漏洞利用所需工具

要成功利用該漏洞,需要用到 James Forshaw 改進過的一個反序列組件TypeConfuseDelegate,具體可以參考此處。其實,該改進組件已經整合到了反序列化工具ysoserial.net中了,可以在此下載。

可用以下命令生成PoC漏洞利用:

ysoserial.exe -f BinaryFormatter -t TypeConfuseDelegateMono -o raw -c "calc" > "C:Users<user>AppDataLocalLowHouse HouseUntitled Goose Gamesavegame0.save"

新發布的TypeConfuseDelegateMono組件,可用來發起對其它基於MONO平台開發遊戲的攻擊測試。

漏洞上報處置進程

07/10/2019 – 向House House公司通報

09/10/2019 – House House確認漏洞

22/10/2019 – House House發布修補程式

29/10/2019 – 公開漏洞

*參考來源:pulsesecurity,clouds編譯整理,轉載請註明來自FreeBuf.COM