知道创宇区块链安全实验室|TreasureDAO 攻击事件分析

前言

北京时间 2022 年 03 月 03 日,知道创宇区块链安全实验室 监测到 Arbitrum 上 TreasureDAO 的 NFT 交易市场 出现多次异常交易,黑客通过漏洞免费获取交易市场中部分 NFT。知道创宇区块链安全实验室将对本次事件深入跟踪并进行分析。

在这里插入图片描述

事件分析

基础信息

攻击交易哈希:
0x57dc8e6a28efa28ac4a3ef50105b73f45d56615d4a6c142463b6372741db2a2b

TreasureMarketplace:0x2E3b85F85628301a0Bce300Dee3A6B04195A15Ee

TreasureMarketplaceBuyer:0x812cdA2181ed7c45a35a691E0C85E231D218E273

攻击流程

攻击者调用 TreasureMarketplaceBuyer 合约的 buyItem 函数进行购买NFT的操作,但是我们从 InputData 中可以看出攻击者传入的 _quantity 参数为0。虽然传入的购买 NFT 数量为 0,但是攻击者依然成功的获得了一枚编号为 [5490] 的 NFT,且 Tokens Tranferred 中并未进行代币转移。

在这里插入图片描述

攻击核心

根据上述分析,问题核心可能出现在TreasureMarketplaceBuyer 合约的 buyItem 函数。跟进分析后发现,用户调用该函数后合约首先计算出用户购买此 NFT 的价格,根据购买数量计算出总的价格并将所需支付的代币转入合约;然后调用 TreasureMarketplacebuyItem 将用户需要购买的 NFT 从 Marketplace 购买到TreasureMarketplaceBuyer 最后将 NFT 发送到用户账户。观察合约 43-46 行发现对 ERC-721 标准的 NFT 转移并未对其进行数量判断,若此时的 _quantity 为 0 ,用户依然会收到 NFT。

在这里插入图片描述

跟进 TreasureMarketplacebuyItem 函数发现,合约从市场回购NFT时只需完成listedItem.quantity >= _quantity 的限制条件后便开始转移 NFT 到TreasureMarketplaceBuyer合约,若此时的 _quantity为 0,依然会转移 NFT 到TreasureMarketplaceBuyer中。

在这里插入图片描述

根据上述分析后发现,当攻击者调用 TreasureMarketplaceBuyer 合约的 buyItem 函数进行购买NFT时,若参数_quantity值为 0,由于合约并没有对NFT转移数量的判断,且计算价格 totalPrice = _pricePerItem * _quantity 结果为 0 ,最后导致攻击者能够免费获取该交易市场中ERC-721标准的NFT。

总结

这次攻击产生的主要原因是项目方对 NFT 转移数量并未做足够的判断,且并未考虑到购买数量为 0 的恶意购买行为。知道创宇区块链安全实验室 在此提醒,任何有关代币转移的操作都需要慎重考虑,合约审计、风控措施、应急计划等都有必要切实落实。

参考链接:

knownseclab.com

knownseclab.com/hacked-archive

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值