驚現低級漏洞?簡析NFT項目Akutar資金鎖定事件

本文約609字,閱讀全文需要約1分鐘
建議在合約設計和實現時,注意代碼實現的正確性。

2022年4月23日,一級標題一級標題

一級標題

#1 事件相關信息

驚現低級漏洞?簡析NFT項目Akutar資金鎖定事件

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

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

0xf42c318dbfbaab0eee040279c6a2588fa01a961d

二級標題

漏洞一:

漏洞一:

漏洞一:processRefunds1.第一個合約漏洞在

中,設計者根據refundProgress計數器進行循環退款。

驚現低級漏洞?簡析NFT項目Akutar資金鎖定事件

二級標題

驚現低級漏洞?簡析NFT項目Akutar資金鎖定事件

漏洞二:

驚現低級漏洞?簡析NFT項目Akutar資金鎖定事件

漏洞二:

漏洞二:

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

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

驚現低級漏洞?簡析NFT項目Akutar資金鎖定事件

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

驚現低級漏洞?簡析NFT項目Akutar資金鎖定事件

而再來看看退款函數processRefunds中:require(_refundProgress < _bidIndex); bidIndex表示所有參與競標的用戶,refundProgress永遠不會高於bidIndex。

驚現低級漏洞?簡析NFT項目Akutar資金鎖定事件

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

驚現低級漏洞?簡析NFT項目Akutar資金鎖定事件

3.所以refundProgress>=5495且refundProgress一級標題

一級標題

#3 總結

針對本次事件,成都鏈安技術團隊建議:

1.開發者應具備基本的安全開發意識,熟悉智能合約開發應注意的安全問題;

原創文章,作者:成都链安。轉載/內容合作/尋求報導請聯系 report@odaily.email;違規轉載法律必究。

ODAILY提醒,請廣大讀者樹立正確的貨幣觀念和投資理念,理性看待區塊鏈,切實提高風險意識; 對發現的違法犯罪線索,可積極向有關部門舉報反映。

推薦閱讀
星球精選