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

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

1事件相关信息

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

多伦多交易所母公司计划推出新交易平台,或将支持加密货币和NFT交易:6月16日消息,多伦多证券交易所(Toronto Stock Exchange)的母公司TMX集团正计划推出一个针对初创企业和另类资产类别的新交易平台。该公司在本周发布的白皮书中表示,新交易所将针对成长型公司。该公司尚未确定哪些资产类别将在新交易所交易,但正在考虑加密货币、NFT、证券化房地产和私营公司的股份。此外,创业版交易所TSX Venture还在考虑为估值不低于5000万加元、同时寻求1000万加元独立融资的公司提供“通行证”,以加快上市流程。[2023/6/16 21:40:54]

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

漏洞合约:

0xf42c318dbfbaab0eee040279c6a2588fa01a961d

Azuki推出两个全新BEANZ NFT角色:Jay&Jelly:金色财经报道,据官方推特,NFT项目Azuki宣布推出两个全新BEANZ角色:Jay和Jelly,并鼓励Azuki粉丝在@BEANZOfficial社交媒体账号上关注这两个角色。此外,BEANZ还发布了介绍Jay&Jelly的视频短片。

另据NFTGo.io数据显示,当前Azuki地板价为12.49 ETH,BEANZ Official地板价升至1.26 ETH,过去24小时上涨3.17%。[2023/2/14 12:05:19]

2?漏洞分析

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

漏洞一:

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

GSR公布其NFT投资组合“GSR Blue”,包含基于以太坊和Solana的蓝筹PFP和生成艺术:6月22日消息,加密做市商GSR公布其NFT投资组合“GSR Blue”,其中包括BAYC #8971、CryptoPunk #8450、CryptoPunk #2290、Moonbirds #8985、Doodle #9317、CloneX #17133等44个NFT。GSR的NFT投资组合选择了建立在以太坊和Solana网络上的PFP和生成艺术,都是来自高质量的蓝筹集合,具有文化意义且由高度知名的团队和社区支持。[2022/6/22 4:44:45]

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

VeeFriends衍生NFT项目Book Games交易额突破1亿美元:金色财经报道,据最新NFT市场数据显示,VeeFriends衍生NFT项目Book Games交易额已突破1亿美元,创历史新高,本文撰写时为103,316,953美元,交易量为94,287笔。Book Games是VeeFriends创始人Gary Vee新书相关联的NFT,购买Gary新书到一定数量的读者会获得NFT的奖励,该系列基于Gary Vee亲手绘制的16个艺术作品创建,当中包含13个核心角色和3个特殊角色,拥有者可以用它交易其他NFT,购买VeeCon的门票或收藏版体育卡。[2022/6/17 4:35:25]

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

杜嘉班纳首个NFT系列在UNXD上完成拍卖,最终拍卖总额为567万美元:10月2日消息,奢侈品品牌杜嘉班纳((Dolce&Gabbana)的首个NFT系列(共9件)在奢侈品市场UNXD的拍卖现已结束,最终拍卖总额为1886ETH,约合567万美元。[2021/10/2 17:21:14]

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:15ms0-0:916ms