SUR:怪事?盗了又归还?TreasureDAO安全事件分析

3月3日,成都链安链必应-区块链安全态势感知平台舆情监测显示,基于 Arbitrum 的 TreasureDAO NFT 交易市场被曝发现漏洞,导致100多个NFT被盗,令人意外的是,在事件发生几小时后,攻击者却开始归还被盗NFT(猜不透攻击者的心思)。关于本次事件,成都链安技术团队第一时间进行了分析。

总述

交易发起地址利用TreasureMarketplaceBuyer合约中存在的逻辑缺陷,通过该合约的buyItem函数的_quantity参数能够置零且不影响ERC-721代币交易的漏洞,将totalPrice置零从而无代价获取ERC-721代币。

Smooth Labs与Conflux合作开发基于Conflux的Layer2解决方案:6月2日消息,区块链基础设施初创公司 Smooth Labs 与 Conflux 达成合作,共同开发基于 Conflux 的支持并行执行的 Layer2 解决方案,预计在 3 个月内部署,包含链上 DApp 资源消耗的实时监控模块和一个用于确定性地验证并行和串行执行结果的验证模块。[2023/6/2 11:54:29]

交易发起地址:

Arbitrum:0x9b1acd4336ebf7656f49224d14a892566fd48e68

福布斯:16种平台币总市值超620亿美元,实际价值存疑:11月15日消息,据外媒报道,全球超过16家加密货币和DeFi交易所创建了其平台币,这些代币的总市值超过620亿美元。这些代币类似于FTX的FTT,不代表公司的任何股权,仅有的价值是使用这些代币的客户可以在交易所以折扣形式的进行交易,在类似于安利等多层次营销机构的系统中,将新交易员介绍给平台的客户也会获得交易所代币。相比之下,DeFi代币声称可以为持有者提供提议和变更投票平台的能力。交易所代币充当了加密货币自我实现泡沫的燃料。但实际上,许多大型DeFi平台将治理权集中在大投资者和创始团队手中。此外,正如FTT并未向持有人提供FTX的股份一样,购买DeFi代币并不一定会将所有权转让给底层平台。Coinbase和Kraken没有发行平台币的原因或是因为他们担心平台币可能会被SEC视为证券。

在福布斯列出的这16个平台中,平台币市值前三的为BNB、OKB和UNI,12个月跌幅分别为55%、31%和78%。12个月跌幅前三的是FTX的FTT(97%)、Synthetix Network的SNX(78%)和PancakeSwap的CAKE(68%)。上述12个月跌幅未记录Bidget的BGB和Whitebit的WBT。(福布斯)[2022/11/15 13:06:06]

被攻击的合约:

美联储戴利:会放缓加息步伐,不是暂停加息:10月22日消息,美联储戴利表示,我们会放缓加息步伐,不是暂停加息,而是加息50或25个基点。想要灵活应对数据变化。可以再来一次75个基点的加息,但不会一直这样。看看鲍威尔主席的新闻发布会,以及美联储12月的新预测,以指导利率走向。[2022/10/22 16:35:05]

Arbitrum:0x812cda2181ed7c45a35a691e0c85e231d218e273

攻击交易:

Arbitrum:0x57dc8e6a28efa28ac4a3ef50105b73f45d56615d4a6c142463b6372741db2a2b

在Arbitrum上,交易发起者通过TreasureMarketplaceBuyer合约的buyItem函数传入了数值为0的_quantity参数,从而无偿购买了TokenID为5490的ERC-721代币。(仅以此次交易为例)

?交易详情

从代码上来看,TreasureMarketplaceBuyer合约的buyItem函数在传入_quantity参数后,并没有做代币类型判断,直接将_quantity与_pricePerItem相乘计算出了totalPrice,因此safeTransferFrom函数可以在ERC-20代币支付数额只有0的情况下,调用TreasureMarketplace合约的buyItem函数来进行代币购买。

TreasureMarketplaceBuyer 合约的?buyItem函数代码

但是在调用TreasureMarketplace合约的buyItem函数时,函数只对购买代币类型进行了判断,并没有对代币数量进行非0判断,导致ERC-721类型的代币可以在无视_quantity数值的情况下直接购买,从而实现了漏洞攻击。

TreasureMarketplace的buyItem函数代码

涉及的代币资产:

总结建议

本次安全事件主要原因是ERC-1155代币和ERC-721代币混用导致的逻辑混乱,ERC-721代币并没有数量的概念,但是合约却使用了数量来计算代币购买价格,最后在代币转账时也没有进行分类讨论。

建议开发者在开发多种代币的销售贩卖合约时,需要根据不同代币的特性来进行不同情况的业务逻辑设计。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

[0:0ms0-0:951ms