NFT项目惊现低级漏洞:合约未审计导致3400万美元资产被锁死_DEFI:DEFI价格

2022年4月23日,成都链安链必应-区块链安全态势感知平台舆情监测显示,NTF项目方Akutar的AkuAuction合约由于智能合约本身漏洞,导致11539ETH被锁死在合约中。成都链安技术团队第一时间对事件进行了分析,结果如下。

1事件相关信息

4月23日消息,Solidity开发者foobar发推称,11539ETH被永久锁定在AkuDreams合约中,个人用户或开发团队都无法取出资金。退款处理完成后,将每个出价状态设置为1。因此,用户无法调用emergencyWithdraw()。此外,团队也无法领取资金,基本上等于销毁。?

音乐NFT市场Mint Songs在以太坊上线V2版,特性包括去中心化策展、1/1音乐NFT等:6月9日消息,由NFT交易市场ZORA提供支持的音乐NFT市场Mint Songs现已在以太坊上线V2版,特性包括去中心化策展、1/1音乐NFT等。未来,Mint Songs还将探索支持在以太坊上创建自定义智能合约、智能合约扩展(拆分、空投等)、跟踪趋势分析以及版税管理等。[2022/6/10 4:15:18]

成都链安技术团队立刻进行了分析。

漏洞合约:

0xf42c318dbfbaab0eee040279c6a2588fa01a961d

2?漏洞分析

Azuki系列NFT连续两日交易额增长超2倍:3月25日消息,据NFTGO数据显示,Azuki系列NFT连续两日交易额增长超2倍,其中3月23日成交额超575万美元,3月24日成交额超1903万美元,23日与24日成交额环比分别增长215.4%与330.7%,近两日有多个巨鲸账户集中买入该系列NFT。[2022/3/25 14:17:12]

Akutar项目的智能合约包含2个漏洞:

漏洞一:

1.第一个合约漏洞在processRefunds中,设计者根据refundProgress计数器进行循环退款。

2.而这里使用了call函数进行退款操作,且把退款的结果作为require的判定条件。

NFT市场OpenSea总交易额击穿40亿美元,创下历史新高:8月30日消息,据最新数据显示,NFT市场OpenSea总交易额已击穿40亿美元(过去7天交易额为15亿美元),创下历史新高,本文撰写时为40.04 亿美元,位列NFT市场交易额排名第一位,交易者数量为319,045 。排在第二名位置的是Axie Infinity,当前交易额达到17.15亿美元;第三名是CryptoPunks,交易额为11.66亿美元。值得一提的是,OpenSea八月产生了23亿美元的交易额,这意味着仅这一个月OpenSea的交易额就占到了期历史总交易额的60%,同时也创下了迄今为止单月交易额的历史最高记录。另外,OpenSea在8月29日单日交易额超过3.22亿美元,续创历史新高。[2021/8/30 22:46:48]

CROSS盲盒游戏26日10:00上线,现公布第一期NFT联名品牌方:据官方消息,CROSS?Mystery Box(盲盒游戏)于2月26日10:00正式上线,每一期会上线一批NFT,每个NFT均配置一个盲盒,其中只有1个盲盒内附大奖。每期盲盒活动的大奖由CyberVein基金会提供。

?第一期盲盒游戏参与竞拍的4副联名款NFT的合作伙伴分别是火币生态链Heco、MXC交易所、Poloniex交易所、NFT平台Piction,并由知名NFT艺术家池磊根据4位合作伙伴的品牌元素设计出各具特色的中国牛年与币圈牛市NFT,前2期的NFT总价已超过500万,盲盒总奖池价值1BTC。玩家可以在游戏时间内对任意联名款NFT多次出价,每一个盲盒中奖率高达25%。详情见官网链接。[2021/2/24 17:47:35]

3.因此如果此时有攻击者在队列中进行退款操作,调用call退款给攻击者时,攻击者在fallback中进行进行恶意的revert则会导致退款队列卡在攻击者这里,从而导致队列后面的所有人都无法进行退款。

4.这个漏洞被人在链上证明有效,但随后攻击合约便进行了解锁,并没有进行攻击利用,且公开进行了申明。

漏洞二:

该漏洞也是导致价值约3400万美元的ETH资产被锁死在合约中的元凶。

1.在claimProjectFunds函数中,该函数主要用于项目方提款。为了避免项目方权限过大,在用户完成提款之前就将合约中的资产全部转走导致用户无法退款,所有的退款操作应全部完成之后项目方才能够提款。业务逻辑设计上来说,是没有问题的。然而,在具体的代码实现中,当前的代码容易受到漏洞一的影响,导致项目方无法提款,不过这只是潜在的风险,本次资金锁死的元凶不是这个原因。

2.注意函数中第620行代码:require此处refundProgress表示已经处理了多少个用户的退款,totalBids表示所有用户总投标了多少个NFT。注意由于一个用户可以投标多个NFT,导致单从数值上比较,refundProgress可能小于totalBids。

而再来看看退款函数processRefunds中:require(_refundProgress<_bidIndex);bidIndex表示所有参与竞标的用户,refundProgress永远不会高于bidIndex。

此时来看看bidIndex的值,为3669:

totalBids的值为5495:

3.所以refundProgress>=5495且refundProgress<3669这个判断条件永远不会成立,最终导致项目方团队将永远无法执行后续的提款操作。此处应将refundProgress与bidIndex做对比,开发者犯了一个很低级的错误。最终,导致项目方11539ETH(价值约3400万美元)被锁定无法提取。

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

金宝趣谈

[0:0ms0-7:209ms