2022年4月23日,一級標題一級標題
一級標題
#1 事件相關信息
4月23日消息,Solidity開發者foobar發推稱,11539ETH(價值3400萬美元)被永久鎖定在AkuDreams合約中,個人用戶或開發團隊都無法取出資金。退款處理完成後,將每個出價狀態設置為1。因此,用戶無法調用emergencyWithdraw()。此外,團隊也無法領取資金,基本上等於銷毀。
成都鏈安技術團隊立刻進行了分析。
0xf42c318dbfbaab0eee040279c6a2588fa01a961d
二級標題
漏洞一:
漏洞一:
漏洞一:processRefunds1.第一個合約漏洞在
中,設計者根據refundProgress計數器進行循環退款。
二級標題
漏洞二:
漏洞二:
漏洞二:
該漏洞也是導致價值約3400萬美元的ETH資產被鎖死在合約中的元兇。
1.在claimProjectFunds函數中,該函數主要用於項目方提款。為了避免項目方權限過大,在用戶完成提款之前就將合約中的資產全部轉走導致用戶無法退款,所有的退款操作應全部完成之後項目方才能夠提款。業務邏輯設計上來說,是沒有問題的。然而,在具體的代碼實現中,當前的代碼容易受到漏洞一的影響,導致項目方無法提款,不過這只是潛在的風險,本次資金鎖死的元兇不是這個原因。
2.注意函數中第620行代碼:require (refundProgress > = totalBids)此處refundProgress表示已經處理了多少個用戶的退款,totalBids表示所有用戶總投標了多少個NFT。注意由於一個用戶可以投標多個NFT,導致單從數值上比較,refundProgress可能小於totalBids。
而再來看看退款函數processRefunds中:require(_refundProgress < _bidIndex); bidIndex表示所有參與競標的用戶,refundProgress永遠不會高於bidIndex。
此時來看看bidIndex的值,為3669:
3.所以refundProgress>=5495且refundProgress一級標題
一級標題
#3 總結
針對本次事件,成都鏈安技術團隊建議:
1.開發者應具備基本的安全開發意識,熟悉智能合約開發應注意的安全問題;