2022年4月23日,成都链安链必应-区块链安全态势感知平台舆情监测显示,NTF项目方Akutar的AkuAuction合约由于智能合约本身漏洞,导致11539ETH被锁死在合约中。成都链安技术团队第一时间对事件进行了分析,结果如下。
1事件相关信息
4月23日消息,Solidity开发者foobar发推称,11539ETH被永久锁定在AkuDreams合约中,个人用户或开发团队都无法取出资金。退款处理完成后,将每个出价状态设置为1。因此,用户无法调用emergencyWithdraw()。此外,团队也无法领取资金,基本上等于销毁。?
Blur出价激励扭曲市场导致NFT报价高于“立即购买”价格:金色财经报道,分析显示Blur出价激励扭曲市场导致NFT报价高于“立即购买”价格,即NFT市场上买家提供的价格高于藏品的要价。 如果您想在Blur购买Doodles NFT,该系列中十多件物品的最高出价为5.07 ETH(约合7,900 美元),而“立即购买”价格为5.03 ETH,其他系列也是如此,包括Bored Ape Yacht Club、Azuki和Moonbird NFT,Moonbird在Blur上的报价高于要价,当对列出的项目进行出价时,卖家必须在交易完成之前接受该价格,而买家会触发“立即购买”项目的交易。 (The Block)[2023/3/8 12:49:49]
成都链安技术团队立刻进行了分析。
阿迪达斯将与英格兰克劳利镇足球俱乐部合作发行NFT:金色财经报道,阿迪达斯宣布与今年初收购英格兰克劳利镇足球俱乐部的美国加密货币投资者集团 Wagmi United 达成合作,并将为该球队创建 NFT,球迷可以收集这些 NFT 来从阿迪达斯获得实体和数字商品。克劳利镇足球俱乐部首批 NFT 将于 7 月 6 日首发,该系列与阿迪达斯合作设计和生产,NFT 持有者将能对克劳利镇俱乐部面临的关键问题和未来发展进行投票。(sporttechie)[2022/7/1 1:43:14]
漏洞合约:
0xf42c318dbfbaab0eee040279c6a2588fa01a961d
2?漏洞分析
Akutar项目的智能合约包含2个漏洞:
过去24小时,BSC链上NFT交易额超过4000万,超越以太坊排名第一:据BSCFA数据显示:过去24小时BSC链上NFT销售的超过4000万美元,本文撰写日为4987577美元,增幅达到9501.74%。数据显示,过去24小时,BSC链上交易额增长最快的3个NFT项目分别是:Baby Wealthy Club(41653667美元)狗ForthBox(2361129美元),AmazingDogeNFT(1154574美元)。[2022/6/27 1:32:53]
漏洞一:
1.第一个合约漏洞在processRefunds中,设计者根据refundProgress计数器进行循环退款。
2.而这里使用了call函数进行退款操作,且把退款的结果作为require的判定条件。
NFTScan团队发布BNBChain网络NFT浏览器网站:3月7日消息,NFT资产浏览器NFTScan团队正式对外发布bnb.nftscan.com浏览器,旨在为BNBChain社区用户提供友好的NFT资产数据的搜索查询功能。据了解,NFTSCAN是一款基于以太坊网络的NFT资产浏览器产品,BNBChain网络是其支持的第2条公链。[2022/3/7 13:41:40]
孙宇晨宣布APENFT基金会联合WINkLink进军Gamefi:7月25日,波场TRON创始人孙宇晨发布推文表示,APENFT基金会将联合TRON生态中的WINkLink,正式进军Gamefi和NFTfi。孙宇晨预测,Gamefi将会像Defi一样强势引领下一个区块链时代的爆点,而WINkLink将会与APENFT基金会all in这个新的风口。[2021/7/25 1:14:40]
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万美元)被锁定无法提取。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。