黄金形态通APP下载

慢霧:Akutars拍賣合約多個代碼缺陷導致11539.5枚ETH永久無法取出

區塊鏈4年前 (2022-04-23)141
據慢霧區情報,Akutars(@AkuDreams) 項目拍賣合約由于多個代碼缺陷導致 11,539.5 枚 ETH 永久無法取出。慢霧安全團隊進行分析如下:1. Akutars 拍賣合約中存在 bid 與 processRefunds 功能,用戶分別可以進行拍賣出價與退款操作;2. 在拍賣結束后發起 processRefunds 退款操作時拍賣合約將遍歷出...
據慢霧區情報,Akutars(@AkuDreams) 項目拍賣合約由于多個代碼缺陷導致 11,539.5 枚 ETH 永久無法取出。慢霧安全團隊進行分析如下:

1. Akutars 拍賣合約中存在 bid 與 processRefunds 功能,用戶分別可以進行拍賣出價與退款操作;
2. 在拍賣結束后發起 processRefunds 退款操作時拍賣合約將遍歷出價用戶,并通過低級調用 call 為用戶進行退款,但并未限制這一調用的 gasLimit。而未做此 gasLimit 限制的情況下,拍賣合約將使用發起者的全部 gas 進行外部調用;
3. 但由于 Akutars 拍賣合約并不限制合約參與拍賣,因此“惡意用戶”可以使用合約參與拍賣,并在其合約的接收以太函數中寫入惡意消耗 gas 的邏輯,使得在進行退款流程時觸發此用戶合約,進而惡意消耗了調用發起者的全部 gas,直接導致后續退款無法正常進行;
4. 幸運的是此“惡意用戶”僅僅只是做了風險驗證測試,最終解除了惡意消耗 gas 的邏輯使得退款可以繼續順利進行。當然用戶也可以在拍賣結束的 3 天后進行緊急退款;
5. 在用戶退款完成后項目方可以通過 claimProjectFunds 功能提取合約中的拍賣所得。但拍賣合約在用戶進行 bid 時使用 totalBids 與 bidIndex 記錄用戶所拍的數量與出價次數,而用戶是可以在一次出價中任意選擇所拍的數量的,因此在拍賣結束 totalBids 實際上大于 bidIndex。當前 totalBids 為 5495,bidIndex 僅為 3669;
6. 但在 claimProjectFunds 函數中卻要求 refundProgress 退款數必須大于等于 totalBids,項目方本意應是為了保證全部用戶完成退款后才可進行取款。而實際上 refundProgress 是根據出價人總數進行計算的,也就是全部退款完成 refundProgress 也只是會等于 bidIndex。這就出現了 refundProgress 永遠不會大于 totalBids 的情況。最終導致合約中 11,539.5 枚 ETH 永遠無法取出;

綜上,即使在用戶無法退款問題被解決的情況下,由于出價人數與拍賣數量的計數不一致以及項目方取款函數的缺陷,最終都會導致 Akutars 資金被永久鎖住的結果。

您暂未设置收款码

请在主题配置——文章设置里上传

扫描二维码手机访问