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

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

1 事件相关信息

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

数据:Worldcoin纪念NFT铸造量突破1万枚:7月27日消息,据Zora平台数据显示,Worldcoin纪念NFT铸造量已突破1万枚,本文撰写时达到10,166枚。此次NFT为限时免费铸造,用户只需支付Gas成本,目前距离铸造结束还有约3天18小时。[2023/7/27 16:02:55]

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

漏洞合约:

0xf42c318dbfbaab0eee040279c6a2588fa01a961d

3张Doge原始照片NFT以420.69 ETH成交:3月8日消息,Etherscan数据显示,3张Doge原始照片NFT以420.69ETH(约合 1,060,409 美元)成交,买方Feisty-Doge地址为0x0aaef7bbc21c627f14cad904e283e199ca2b72cc。

据悉,这3张Doge原始照片NFT分别名为Yelling Doge、Angry Doge和Sad Doge。这些照片最初由柴犬的主人佐藤敦子拍摄并在她的个人博客上分享,随后在网上疯传成为Doge最具标志性的 Meme 图像。[2022/3/8 13:44:30]

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

美国导演昆汀·塔伦蒂诺因《低俗小说》NFT计划被起诉:金色财经报道,电影《低俗小说》的导演昆汀·塔伦蒂诺(Quentin Tarantino)计划中的NFT销售遇到了一些法律阻力。本月早些时候,昆汀宣布,将把《低俗小说》中的七个未剪辑场景作为NFT在OpenSea上进行拍卖。然而,制作该电影的米拉麦克斯公司已对昆汀提起诉讼,该公司在周二提起的诉讼中声称它拥有《低俗小说》的权利。这家娱乐公司声称昆汀“对米拉麦克斯隐瞒了该NFT计划”,并无视与销售有关的停止令。米拉麦克斯还表示,昆汀声称他所谓的保留权利使他有权执行NFT计划。具体而言,米拉麦克斯指控其涉嫌违约、不正当竞争和商标侵权。[2021/11/17 6:55:39]

漏洞一:

美SEC委员:不要轻易创建NFT,它可能被归类为证券:美国证券交易委员会(SEC)委员、“加密妈妈”Hester Peirce表示,不可替代代币和NFT指数篮子的发行人可能在无意中分发了投资产品。Peirce警告称,最好不要创建投资产品,那将被归类为证券,并被涵盖在证券法的监管之下。(Cointelegraph)[2021/3/26 19:19:45]

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

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

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

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

漏洞二:

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

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

2.注意函数中第620行代码:require (refundProgress > = totalBids)此处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-2:538ms