重建世界:The Sandbox 任意燃烧漏洞回顾

By:Victory@慢雾安全团队

据慢雾区情报,2022 年 1 月 28 日 The Sandbox 官方发布一则 LAND 智能合约迁移的公告,但是在公告中没有说明合约具体是出了什么问题,慢雾安全团队现将简要分析结果分享如下。

项目背景

The Sandbox 是一个虚拟世界,玩家可以使用平台代币 SAND 在以太坊区块链中创建、拥有自己的游戏体验并从中获利。在这里你可以玩、创造、收集、赚取、治理和拥有游戏中的任何东西。

简要分析

1.通过阅读问题的合约,地址:0x50f5474724e0Ee42D9a4e711ccFB275809Fd6d4a,发现在以往都设置成内部调用的 _burn 函数在问题合约是一个 public 的状态。

慢雾

虽然函数内有做 require(from == owner, “not owner”); 判断,但是这个 from 是可以由调用者自己构造。这就导致任何用户都可以去随意 burn 掉其他用户的 NFT。

2.我们尝试着去查询链上的交易记录,发现已经有人进行了 _burn 测试,成功燃烧掉了一块不属于他的 NFT,但没有发现大规模的攻击行为,应该是个白帽测试。

慢雾

3.从上图我们可以看到燃烧的 tokenID 是 3738, 但是 NFT tokenURI (https://api.sandbox.game/lands/3738/metadata.json) 仍可正常访问,土地的 NFT 信息也仍然可以访问 (https://www.sandbox.game/en/lands/9045d0ed-2fdd-4bd1-b606-28527b4eb39c/),我们推测官方应该已经对此做出修改。

4.随后查看了项目方升级后的新合约,地址:0x5CC5B05a8A13E3fBDB0BB9FcCd98D38e50F90c38

慢雾

发现项目方这次更新后使用的是 proxy 合约(可能是便于日后出问题之后可以对合约进行二次升级),逻辑合约地址:0x1fc6479bdc7511c6803aff2f477e0fd3171606e0,对比后发现修改过的 _burn 函数其函数可见性已经修改成 internal。

5.至此,The Sandbox 事件简要分析完毕。通过查询合约发现还是有部分 NFT 拥有者还未做迁移,这是项目方提供的迁移界面:https://sandbox.game/en/me/migrate。

总结

本次事件中项目方及时的确认了问题并且提出了解决方案,未造成用户资产的严重损失。但是漏洞的细节让人细思极恐。如果有攻击者利用此漏洞并进行恶意攻击,那么整个 The Sandbox 的土地将被燃烧殆尽。从中我们也可以发现没有安全性的元宇宙世界就是空中楼阁。

慢雾安全团队建议:元宇宙系统的安全边界更广,上线前应该进行充分的安全审计,避免出现类似严重的问题。

1赞