Treasure 通过一种开放和可组合的方法,为日益增长的元宇宙架起了桥梁,使NFTs、DeFi和游戏融合在一起。
零时科技区块链安全情报平台监控到消息,北京时间2022年3月3日,TreasureDAO遭到黑客攻击,超过百枚NFT Token被盗,价值约140万美元,零时科技安全团队及时对此安全事件进行分析。
-
攻击者钱包地址
https://arbiscan.io/address/0x9b1acd4336ebf7656f49224d14a892566fd48e68
-
攻击者交易
https://arbiscan.io/tx/0xb169e20b45c6a5b7e5726c812af73c0b48996a4db04b076d6ef484ca5a300d36
-
出现漏洞的官方合约地址
TreasureMarketplaceBuyer
https://arbiscan.io/address/0x812cda2181ed7c45a35a691e0c85e231d218e273#code
TreasureMarketplace
https://arbiscan.io/address/0x2e3b85f85628301a0bce300dee3a6b04195a15ee#code
先来看一下攻击者获利的交易操作:
从攻击交易可以明确,攻击者调用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的可能性
-
建议对于ERC721及ERC1155协议的NFT Token进行严格区分,避免混淆情况发生
?扫描关注零时科技服务号?
?区块链安全威胁情报实时掌握?
出品 | 零时科技安全团队
·END·
关注
往期内容回顾
区块链安全100问 | 第四篇:保护数字钱包安全,防止资产被盗
区块链安全100问 | 第五篇:黑客通过这些方法盗取数字资产,看看你是否中招?
零时科技 | 被盗6.1亿美金,Poly Network 被攻击复盘分析
原文始发于微信公众号(零时科技):零时科技 | TreasureDAO攻击事件分析