TreasureDAO攻击事件分析

阅读量    68466 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

0x1 事件背景

Treasure 通过一种开放和可组合的方法,为日益增长的元宇宙架起了桥梁,使NFTs、DeFi和游戏融合在一起。

零时科技区块链安全情报平台监控到消息,北京时间2022年3月3日,TreasureDAO遭到黑客攻击,超过百枚NFT Token被盗,价值约140万美元,零时科技安全团队及时对此安全事件进行分析。

 

0x2 攻击信息

零时科技安全团队通过追踪分析,主要攻击信息如下:

  • 攻击者钱包地址

https://arbiscan.io/address/0x9b1acd4336ebf7656f49224d14a892566fd48e68

  • 攻击者交易

https://arbiscan.io/tx/0xb169e20b45c6a5b7e5726c812af73c0b48996a4db04b076d6ef484ca5a300d36

  • 出现漏洞的官方合约地址

TreasureMarketplaceBuyer

https://arbiscan.io/address/0x812cda2181ed7c45a35a691e0c85e231d218e273#code

TreasureMarketplace

https://arbiscan.io/address/0x2e3b85f85628301a0bce300dee3a6b04195a15ee#code

 

0x3 攻击分析

先来看一下攻击者获利的交易操作:

从攻击交易可以明确,攻击者调用TreasureMarketplaceBuyer合约中buyItem方法获取了NFT,并且攻击者提供的购买资金为0,这里需要注意buyItem方法中第四个参数_quantity传参为0。

下面直接来看TreasureMarketplaceBuyer合约buyItem方法。

分析buyItem方法可以明确,这里的_quantity参数,也就是购买数量由用户输入,但是在37行计算时,价格和购买数量零相乘,会得到最终价格也为零,之后的用户给合约转账也是零。也就是说用户完成了零资金购买,下面继续分析攻击者如何将零资金购买的NFT提到自己账上,转移资金后,这里调用了marketplace合约中buyItem方法,继续跟进:

上图buyItem方法中两个判断条件,首先对该NFT的所有者进行了异同判断,之后对该NFT进行了数量判断,由于攻击者传参为零,所以这里很轻易的可以绕过判断,最终零成本购买NFT成功,攻击者通过此漏洞,多次调用buyItem方法零成本获取了大量NFT Token。

目前Treasure发布公告称已冻结交易,同时攻击者也在归还NFT。

 

0x4 总结

攻击者虽然通过合约进行零资金购买NFT,但随后又逐步在归还获取的NFT Token。暂时不能确定是否为测试人员所为,希望用户及官方不会有太大的资金损失。通过此次攻击事件来看,攻击者抓住了对合约对零资金购买NFT的限制缺失,导致通过该漏洞获取大量NFT Token,所以对于以上合约漏洞,零时科技安全团队给出以下建议。

 

0x5 安全建议

  • 建议合约应严格判断用户输入购买数量的合理性
  • 建议合约限制零资金购买NFT的可能性
  • 建议对于ERC721及ERC1155协议的NFT Token进行严格区分,避免混淆情况发生
分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多