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

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

1事件相关信息

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

Fortune:a16z对加密货币和区块链投资明显放缓:10月21日消息,据《财富》(Fortune)杂志披露,a16z参与的全球加密货币和区块链风险投资交易出现明显放缓的迹象。数据显示,管理着76亿美元资金的a16z Crypto在三季度仅有7笔加密和区块链风险投资交易,创下自2021年一季度以来的最低记录。另据据PitchBook的数据显示,a16z Crypto的投资规模也出现骤降从2022年一季度的24亿美元跌至三季度的约6亿美元,但仍高于2021年三季度。

对于《财富》披露的数据,a16z一位发言人表示,鉴于尚有投资交易尚未公开披露,因此该公司对相关数据无法给予确认。[2022/10/21 16:34:34]

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

a16z发布“暑假加密书单”,31本推荐读物入选:金色财经报道,据 a16z 官方社交媒体账户,旗下加密风投 a16z Crypto阿布了“暑假加密书单”,总计31本推荐读物入选,包括爱因斯坦的《我眼中的世界》?、Justin Thaler的《证明、论证和零知识》等,涵盖了算法、密码学、市场和系统设计、时间旅行、空间、哲学等内容。[2022/7/10 2:03:00]

漏洞合约:

0xf42c318dbfbaab0eee040279c6a2588fa01a961d

2?漏洞分析

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

a16z报告:DAO最好提交法律文件并进行纳税:6月3日消息,DAO的兴起引发了法律上的难题,即如何正式建立一个设计上并不真正想成为实体的实体。a16z提出了一套拟议的解决方案,并于周四发布了一份报告,称这类群体可能更适合安顿下来并缴纳美国税款。DAO将资金锁定在一个区块链上,一组参与者可以透明地朝向某个共同目标。a16z在其最近一次为DAO建立美国法律基础的公开努力中称,DAO需要“不要求进行真实世界的人类活动”的结构来满足法律要求——可能有利于非法人非营利组织(UNA)和有限责任公司(LLC)。面临的挑战是保持DAO的去中心化,同时允许它满足企业或非营利组织的税务要求和其他实际需求。

a16z总顾问兼去中心化负责人Miles Jennings和参与DAO研究小组的律师David Kerr撰写的论文称,使用受欢迎的离岸策略来避税可能会大大增加全球抵制的风险。美国国内结构对拥有大量美国成员和联系方的项目的实际好处是显而易见的,该文件总结道,并质疑在行业等待监管的同时进入免税司法管辖区是否真的是最佳的行动方案。(CoinDesk)[2022/6/3 4:00:07]

漏洞一:

a16z:投资Flowcarbon因相信链上碳信用将成为金融架构关键部分:金色财经报道,a16z在其官方网站发文解释了投资Flowcarbon的原因,其中指出,链上碳信用是一个创新原语,可以作为一种可组合金融工具集成到现有的 DeFi 生态系统中,并被 web3 建设者创造性地用于提出激励气候积极行为的全新方式。Flowcarbon 的 GNT 完全由链下信用的实时价值支持,可以用作抵押品、协议金库资产、稳定币储备或抵消链上碳信用额。链上碳信用额将成为金融架构关键部分,推动打造一个零碳未来。[2022/5/25 3:40:36]

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

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

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:15ms0-8:270ms