[如何写出一行价值34M USD的代码] Akutar NFT漏洞分析

admin 2022年4月25日03:03:57评论47 views字数 918阅读3分3秒阅读模式

BlockSec发现Akutar数字藏品合约(https://etherscan.io/address/0xf42c318dbfbaab0eee040279c6a2588fa01a961d)存在两个非常严重的漏洞。第一个漏洞可以导致合约被DoS攻击,用户存入的资产被锁定(所幸漏洞没有被利用)。第二个漏洞可以导致项目方的资产(超过34M USD)被永远锁定在合约中无法取出。

漏洞 I


[如何写出一行价值34M USD的代码] Akutar NFT漏洞分析


第一个漏洞是存在于 processRefunds 函数中。这个函数中使用循环来给所有用户进行退款。然而如果被退款的用户是一个恶意合约,这个合约合约可以拒绝退款并且revert交易,这导致所有用户的退款交易都会被revert。幸运的是这个漏洞在实际上没有被利用。

我们建议如果项目方存在退款逻辑,可以通过以下的方式安全退款。

  • 只有EOA用户才可以参与项目

  • 使用ERC20资产比如WETH,而不是原生资产

  • 设计一个用户自己主动claim自己退款的函数,而不是批量退款

漏洞 II

[如何写出一行价值34M USD的代码] Akutar NFT漏洞分析

第二个漏洞是一个软件bug。在claimProjectFunds 函数中,项目方尝试取出项目中所有的资产。然而,函数中require(refundProgress >= totalBids, "Refunds not yet processed");语句有一个bug,这个语句应该是比较refundProgress 和 _bidIndex 而不是totalBids. 由于合约中refundProgress 永远比totalBids小,而且refundProgress的值也不会再增大,导致这个比较永远不能满足。因此项目方的资产被永远锁定在合约中。

目前在合约中锁定了超过34M USD的资产。

总结

我们再一次惊讶(在发生了NBA的NFT签名校验漏洞后)一个非常知名项目居然会发生这样低级的错误。在开发的时候,项目方需要编写足够的测试用例以及需要有基本的安全思维。在DeFi场景中,安全审计已经成为通用实践,然而在数字藏品项目中,我们发现安全审计目前还是缺失的,而这样的缺失导致了3400万美金的损失。


原文始发于微信公众号(BlockSec Team):[如何写出一行价值34M USD的代码] Akutar NFT漏洞分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月25日03:03:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [如何写出一行价值34M USD的代码] Akutar NFT漏洞分析http://cn-sec.com/archives/937351.html

发表评论

匿名网友 填写信息