2022年4月23日,成都链安链必应-区块链安全态势感知平台舆情监测显示,NFT项目方Akutar的AkuAuction合约由于智能合约本身漏洞,导致11539ETH被锁死在合约中。成都链安技术团队第一时间对事件进行了分析,结果如下。
#1事件相关信息
4月23日消息,Solidity开发者foobar发推称,11539ETH被永久锁定在AkuDreams合约中,个人用户或开发团队都无法取出资金。退款处理完成后,将每个出价状态设置为1。因此,用户无法调用emergencyWithdraw()。此外,团队也无法领取资金,基本上等于销毁。?
Hedera:核心团队正在积极调查已发现的智能合约异常情况:3月10日消息,Hedera官方发推称,核心团队正在积极调查已发现的智能合约异常情况。该团队正在与生态内的DeFi团队合作,以确定原因和潜在影响。
此前消息,Hedera上DeFi项目SaucerSwap发推称,一个持续的漏洞攻击了Hedera网络,该漏洞利用的目标是智能合约中的反编译过程。攻击者已经攻击了包含封装资产的Pangolin和HeliSwap池。不确定其他HTS代币是否也有风险。目前还没有关于SaucerSwap用户资金被盗的报道,但作为预防措施,鼓励大家立即撤回流动资金。[2023/3/10 12:52:46]
成都链安技术团队立刻进行了分析。
CFTC主席:必须获得国会的授权,以全面监管加密市场:金色财经报道,美国商品期货交易委员会(CFTC)Rostin Behnam在参议院听证会中表示,希望获得新的权力来监管加密货币。他说,“我们缺乏全面监管数字商品市场的权力,为了防止这种情况再次发生,我们必须获得国会的适当授权。”
Behnam认为,即使美国政府决定将整个行业推向海外,数字资产也会存在。如果政策制定者围绕市场建立一个联邦框架,更多的加密公司可能会转移到美国,围绕整个行业建立更多的结构,包括执行经审计的财务披露,这将有助于防止客户资金与专有资金混合。CFTC主席指出,他的机构正在与SEC协调对FTX的调查。[2022/12/2 21:16:37]
漏洞合约:
Charles Hoskinson揭示Cardano生态系统增长的关键因素:5月16日消息,Cardano创始人Charles Hoskinson最近透露了促进Cardano生态系统增长的关键因素:“多年的进步、建设和一个巨大的社区。”
目前,在Cardano上有937个项目在构建,高于之前的925个。最近有84个项目在Cardano上推出,而NFT项目的数量达到5549个。IOHK最近的统计数据显示,Github本周的连接总数为2609个。
Hoskinson还表示,Vasil硬分叉仍在正轨上。Cardano及其智能合约平台Plutus将于6月29日在Vasil硬分叉中进行重大改进。为此,IOHK暗示,测试网可能在5月底上线。IOHK称,即将到来的Vasil更新将引入四个不同的CIPs:CIP-31(参考输入)、CIP-32(内联数据)、CIP-33(参考脚本)和CIP-40(抵押品输出)。(U.Today)[2022/5/16 3:20:09]
0xf42c318dbfbaab0eee040279c6a2588fa01a961d
#2?漏洞分析
Akutar项目的智能合约包含2个漏洞:
漏洞一:
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万美元)被锁定无法提取。
#3?总结
针对本次事件,成都链安技术团队建议:
1.开发者应具备基本的安全开发意识,熟悉智能合约开发应注意的安全问题;
2.在合约设计和实现时,注意代码实现的正确性,项目上线前,可选择专业的安全审计公司进行全面的安全审计,规避安全风险。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。