在2025年1月8日,由於更新使用者餘額時存在缺陷,導致BSC上的Mosca合約遭到駭客攻擊,造成約19,485美元的損失。
概述
分析
當用戶join()時,他們會被新增到rewardQueue中。從此,每當其他使用者buy()或swap()代幣時,他們就會獲得獎勵。
感謝閱讀Verichains!免費訂閱以接收新帖並支援我的工作。
當用戶決定退出時,會呼叫exitProgram()。它會遍歷rewardQueue,當找到匹配的使用者時,呼叫withdrawAll()將所有待領取的獎勵轉移給使用者。
在withdrawAll()中,使用者的總獎勵計算為:balance = user.balance + user.balanceUSDT + user.balanceUSDC
但是,在exitProgram()中,只有user.balance被設定為0,user.balanceUSDT和user.balanceUSDC在使用者退出後仍然保持原值。駭客利用了這個漏洞進行了攻擊。
駭客首先join()該協議併成功存入一些資產(步驟4)。然後,他們利用一個池子進行閃電貸(步驟15),並建立一個'偽造的'buy()操作(步驟23)來獲得自己的獎勵。最後,他們反覆呼叫join()和exitProgram()來清空合約中的USDC。
結論
開發人員違反了檢查-效果-互動模式,並在駭客攻擊發生前僅幾天部署了Mosca合約,這可能表明他們面臨著高度的時間壓力,產品缺乏足夠的測試。為了防止此類問題,我們強烈建議從開發的初始階段開始,並貫穿整個專案的生命週期,實施健全的稽核流程。定期進行安全審計、程式碼審查和漏洞評估應該是標準做法,以在漏洞被利用之前識別和解決潛在的風險。
感謝閱讀Verichains!免費訂閱以接收新帖並支援我的工作。



