​零时科技 | TreasureDAO攻击事件分析

通过此次攻击事件来看,攻击者抓住了对合约对零资金购买NFT的限制缺失,导致通过该漏洞获取大量NFT Token,

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进行严格区分,避免混淆情况发生
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
零时科技
零时科技
0xbD0b...A354
专注区块链生态安全