4月23日,NFT项目Akutars 在社交媒体上发布了有关11,539ETH(价值3400万美元)被永久锁定的消息。
Armors Company Limited分析了Akutars事件,得出此次被永久锁定的根本原因为合约上线前代码未经安全机构审计,上线后因其合约实现逻辑漏洞问题导致价值3400万美元的ETH永久被锁死在合约中,用户和开发团队都无法取出资金,这部分资金等同于被销毁状态。
Akutars表示,本次合约漏洞主要因项目方的失误造成,并非被人为恶意利用合约漏洞,被锁定的ETH已无法退还,团队正在紧急协商应对措施,将尽快铸造NFT给用户。
Armors Company Limited将此次事件整理分析一下,提醒项目方朋友将来以此为鉴。?
Akutars漏洞合约地址如下:
0xf42c318dbfbaab0eee040279c6a2588fa01a961d
Akutars项目采用的是类似荷兰降价拍卖的形式,拍卖结束后会按照结束价格给用户退还超过最低价格的部分。这涉及了refund以及total bids统计两个方面,而项目方的合约在这两个方面都存在着实现逻辑问题。
首先,来看第一个合约漏洞。processRefunds会被恶意合约阻断,实现DOS攻击,也的确有用户使用恶意合约阻断了processRefunds执行,但该名用户表示只是让项目方确认问题存在,随即设置恶意合约变量,使得processRefunds顺利执行完。这个漏洞被人在链上证明有效,随后攻击合约便进行了解锁,并没有进行攻击利用且公开进行了申明,说明这个漏洞并不是此次资金被锁定的原因所在。?
接下来的第二个漏洞,才是这次事件的真正元凶,导致了资金被永久锁定在合约中并无法提款。我们看到在Akutars合约中,processRefunds是按照msg.sender的数量记录在了refundProgress变量,拍卖结束项目方调用claimProjectFunds取出合约内的ETH时,要求满足refundProgress>=totalBids。而totalBids记录的是NFT的数量,合约最终状态refundProgress 数值为3669,totalBids数值为5495。
也就是说,这里的refundProgress>=5495且refundProgress<3669,这个判断条件永远不会成立,最终导致了项目方团队自己也将永远无法执行后续的提款操作,此处应将refundProgress与bidIndex做对比。这是Akutars开发者犯的一个很不应该的严重错误。最终,直接导致了项目方11539ETH被锁定无法提取。
这里还需要指出的是,在执行processRefunds之前,参与拍卖的用户可以在三天后通过 emergencyWithdraw将个人投入的ETH取回,但由于processRefunds的执行,导致用户的拍卖状态由未处理变为refund,从而不能再进行emergencyWithdraw。
通过以上分析,我们看出由于Akutars项目方上线前没有对其智能合约进行安全审计,上线后才导致发生了这次资金被永久锁定在合约中无法提取的严重事件。
Armors Company Limited曾不止一次的强调合约安全审计的重要性和必要性,还有很多项目方存在着侥幸心理,觉得问题不会发生在自己项目身上。往往就是抱有的这种侥幸心态,是安全事件频发的原因。项目方开发者应具备基本的安全开发意识,熟悉智能合约开发应注意的安全问题,也务必把合约代码安全当成重中之重,审计是保证代码安全的关键因素,因此合约代码找行业内正规的安全公司进行审计,并定期检查更新。Armors Company Limited同时提醒项目方,上线后要注意加强数据的安全监控。如果项目方合约代码是通过正规审计机构全面合规审计的,就能有效避免安全事件的发生。
Armors Company Limited安全机构成立于2017年,是行业最早成立的专业区块链安全机构之一。Armors Company Limited是Polygon、BSC、Ethereum、Solana等公链审计合作伙伴,已为超过2000家区块链平台、交易所、钱包、DApp等机构和项目提供安全审计、渗透测试、跨链迁移、平台安全等各方面保障及服务。成立以来,Armors Company Limited已为客户挽回超过32000个BTC的资产损失。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。