云服务和游戏系统或被轻易入侵!Squirrel Engine漏洞可使黑客执行任意代码

越界读取漏洞使攻击者能够在每月有数百万玩家的游戏(例如反恐精英:全球攻势和门户 2)以及云服务(例如 Twilio Electric Imp)中逃脱 Squirrel VM。

Squirrel编程语言中的越界读取漏洞可让攻击者突破沙盒限制,并在Squirrel虚拟机 (VM) 中执行任意代码,从而使恶意行为者能够完全访问底层机器。

鉴于Squirrel在游戏中并嵌入物联网 (IoT) 中,该漏洞可能危及数百万每月玩电子游戏(如反恐精英:全球攻势和门户 2)以及云服务(如在Twilio电器进出口物联网平台),其准备使用的开源代码库。

Squirrel是一种开源、面向对象的编程语言,用于视频游戏和云服务的定制和插件开发。它是一种轻量级的脚本语言,适合视频游戏和嵌入式系统等应用程序的大小、内存带宽和实时需求。

上面提到的两个游戏都使用Squirrel Engine游戏库,让玩家能够创建自定义游戏模式和地图。

跟踪为CVE-2021-41556,当使用称为Squirrel Engine的游戏库执行不受信任的代码并影响 Squirrel 的稳定版本分支 3.x 和 2.x时,就会出现此问题。CVE-2021-41556的Squirrel越界读取漏洞可在使用Squirrel引擎执行不受信任的代码时被利用,例如Twilio Electric Imp或某些视频游戏。

安全研究人员解释称:“当服务器所有者下载并安装这个恶意地图到他的服务器上时,Squirrel 脚本就会被执行,逃离它的虚拟机,并控制服务器机器。”

在定义 Squirrel 类时,安全漏洞涉及“通过索引混淆进行的越界访问”。研究人员解释说:“事实上,在索引中设置位标志是有问题的,因为攻击者完全有可能创建一个具有0x02000000方法的类定义。” 他们创建了以下“非常简单”的概念证明 (PoC):只需一小部分代码,就可以利用这些代码劫持程序,并授予攻击者对Squirrel VM的完全控制。

图片1.png

根据分析,“rawset和rawget函数允许我们方便地访问给定类的成员。”在这个PoC中,Squirrel 解释器将解引用空指针和段错误,因为_defaultvalues数组还没有被分配。

攻击者可以通过以下方式触发漏洞:

创建具有0x02000005方法和0x1字段的类定义

使用对应的索引0x02000005访问该方法

当设置了位标志0x02000000时,_isfield()宏为该索引返回true

使用索引0x5访问_defaultvalues数组。但是,它只包含0x1项,因此攻击者已经越界访问了。

该漏洞很危险,因为恶意行为者可以设置可以读取和写入值的虚假数组。通过这样做,研究人员发现他们可以他们通过重写函数指针来“劫持程序的控制流,并获得对Squirrel VM的完全控制”。

网络安全研究团队提供了下图,显示了攻击者控制的指针链,可以对整个地址空间进行读写:

图片2.png

Squirrel GitHub存储库已修补

Squirrel GitHub 存储库的维护者在8月份承认了该漏洞。9月16日,作为代码提交的一部分推出了一个补丁。

但正如The Hacker News所指出的,这些更改并未包含在新的稳定版本中,最新的正式版本 (v3.1)于2016年3月27日发布。

因此,发现该漏洞的研究人员“高度”推荐在项目中使用Squirrel的维护人员应用可用的修复程序提交,以防止攻击。

在敏捷开发的今天,越来越多的开源代码及组件被开发人员引入到应用程序中来。相信任何企业都不想遭到网络攻击,但将不安全的代码引入软件会大大增加遭到网络攻击风险。建议企业在软件开发过程中或进行DevsecOps建设时,进行静态代码安全检测及开源代码安全测试,以确保自研代码及开源代码安全,同时提高软件安全性降低遭到网络攻击的风险。

参读链接:

threatpost.com/squirrel-at…

thehackernews.com/2021/10/squ…

评论