NFT項目惊現低級漏洞:合約未審計導致3400萬美元資產被鎖死

2022年4月23日,成都鏈安鏈必應-區塊鏈安全態勢感知平台輿情監測顯示,NTF項目方Akutar的AkuAuction合約由於智能合約本身漏洞,導致11539ETH(價值約3400萬美元)被鎖死在合約中。成都鏈安技術團隊第一時間對事件進行了分析,結果如下。

1 事件相關信息

4月23日消息,Solidity開發者foobar發推稱,11539ETH(價值3400萬美元)被永久鎖定在AkuDreams合約中,個人用戶或開發團隊都無法取出資金。退款處理完成後,將每個出價狀態設置為1。因此,用戶無法調用emergencyWithdraw()。此外,團隊也無法領取資金,基本上等於銷毀。

成都鏈安技術團隊立刻進行了分析。

漏洞合約:

0xf42c318dbfbaab0eee040279c6a2588fa01a961d

2 漏洞分析

Akutar項目的智能合約包含2個漏洞:

漏洞一:

1.第一個合約漏洞在processRefunds中,設計者根據refundProgress計數器進行循環退款。

2.而這裡使用了call函數進行退款操作,且把退款的結果作為require的判定條件。

  NFT項目惊現低級漏洞:合約未審計導致3400萬美元資產被鎖死

3.因此如果此時有攻擊者在隊列中進行退款操作,調用call退款給攻擊者時,攻擊者在fallback中進行進行惡意的revert則會導致退款隊列卡在攻擊者這裡,從而導致隊列後面的所有人都無法進行退款。

  NFT項目惊現低級漏洞:合約未審計導致3400萬美元資產被鎖死

4.這個漏洞被人在鏈上證明有效,但隨後攻擊合約便進行了解鎖,並沒有進行攻擊利用,且公開進行了申明。

  NFT項目惊現低級漏洞:合約未審計導致3400萬美元資產被鎖死

漏洞二:

該漏洞也是導致價值約3400萬美元的ETH資產被鎖死在合約中的元兇。

1.在claimProjectFunds函數中,該函數主要用於項目方提款。為了避免項目方權限過大,在用戶完成提款之前就將合約中的資產全部轉走導致用戶無法退款,所有的退款操作應全部完成之後項目方才能夠提款。業務邏輯設計上來說,是沒有問題的。然而,在具體的代碼實現中,當前的代碼容易受到漏洞一的影響,導致項目方無法提款,不過這只是潛在的風險,本次資金鎖死的元兇不是這個原因。

2.注意函數中第620行代碼:require (refundProgress > = totalBids)此處refundProgress表示已經處理了多少個用戶的退款,totalBids表示所有用戶總投標了多少個NFT。注意由於一個用戶可以投標多個NFT,導致單從數值上比較,refundProgress可能小於totalBids。

  NFT項目惊現低級漏洞:合約未審計導致3400萬美元資產被鎖死

而再來看看退款函數processRefunds中:require(_refundProgress

  NFT項目惊現低級漏洞:合約未審計導致3400萬美元資產被鎖死

此時來看看bidIndex的值,為3669:

  NFT項目惊現低級漏洞:合約未審計導致3400萬美元資產被鎖死

totalBids的值為5495:

  NFT項目惊現低級漏洞:合約未審計導致3400萬美元資產被鎖死

3.所以refundProgress>=5495且refundProgress

Total
0
Shares
Related Posts