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

현재 언어 번역이 없어 원문을 표시합니다.

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

漏洞 I

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

  1. 我们建议如果项目方存在退款逻辑,可以通过以下的方式安全退款。
  2. 只有EOA用户才可以参与项目
  3. 使用ERC20资产比如WETH,而不是原生资产
  4. 设计一个用户自己主动claim自己退款的函数,而不是批量退款

漏洞 II

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

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

总结

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

공유하기:

작성자: BlockSec

이 글은 PANews 입주 칼럼니스트의 관점으로, PANews의 입장을 대표하지 않으며 법적 책임을 지지 않습니다.

글 및 관점은 투자 조언을 구성하지 않습니다

이미지 출처: BlockSec. 권리 침해가 있을 경우 저자에게 삭제를 요청해 주세요.

PANews 공식 계정을 팔로우하고 함께 상승장과 하락장을 헤쳐나가세요