当前位置:首页 > 知识 >

TreasureDAO安全事件:攻击者盗走资金后又归还,真相揭晓!

3月3日,成都链安链必应-区块链安全态势感知平台舆情监测显示,基于Arbitrum的TreasureDAONFT交易市场被曝发现漏洞,导致100多个NFT被盗。然而,让人惊讶的是,几个小时后,攻击者开始归还被盗NFT,攻击者的行为不可预测。成都链安技术团队第一时间分析了这次事件。

#1总述 攻击者利用TreasureMarketplaceBuyer合约的逻辑漏洞,通过buyItem函数的_quantity参数能够置零的漏洞,将totalPrice置零从而无代价获取ERC-721代币。攻击者的交易发起地址是Arbitrum的0x9b1acd4336ebf7656f49224d14a892566fd48e68,被攻击的合约是Arbitrum的0x812cda2181ed7c45a35a691e0c85e231d218e273。攻击交易是Arbitrum的0x57dc8e6a28efa28ac4a3ef50105b73f45d56615d4a6c142463b6372741db2a2b。攻击者通过TreasureMarketplaceBuyer合约的buyItem函数传入了数值为0的_quantity参数,在Arbitrum上无偿购买了TokenID为5490的ERC-721代币。

交易详情 从代码上来看,TreasureMarketplaceBuyer合约的buyItem函数在传入_quantity参数后,并没有做代币类型判断,直接将_quantity与_pricePerItem相乘计算出了totalPrice。因此,safeTransferFrom函数可以在ERC-20代币支付数额只有0的情况下,调用TreasureMarketplace合约的buyItem函数进行代币购买。然而,在调用TreasureMarketplace合约的buyItem函数时,函数只对购买代币类型进行了判断,并没有对代币数量进行非0判断。这导致ERC-721类型的代币在无视_quantity数值的情况下直接购买,从而实现了漏洞攻击。

涉及的代币资产: #2总结建议 本次安全事件主要原因是ERC-1155代币和ERC-721代币混用导致的逻辑混乱。ERC-721代币并没有数量的概念,但是合约却使用了数量来计算代币购买价格。最后,在代币转账时也没有进行分类讨论。建议开发者在开发多种代币的销售贩卖合约时,需要根据不同代币的特性来进行不同情况的业务逻辑设计。

猜你喜欢

关注我们

微信二维码

微信