據區塊鏈安全審計公司Beosin旗下Beosin EagleEye安全風險監控、預警與阻斷平台監測顯示,Polygon鏈上LibertiVault合約遭遇攻擊,損失約123ETH和56,234USDT價值約29萬美元,以及以太坊鏈上35ETH和96223USDT價值約16萬美元,總共超45萬美元。技術人員分析發現,本次攻擊是由於LibertiVault合約存在重入漏洞所導致。
1、攻擊者使用閃電貸借出500萬USDT,調用LibertiVault合約deposit函數進行質押,其質押邏輯會將質押的代幣一部分用於兌換,然後再計算鑄幣數量,鑄幣數量是根據和合約本次存入代幣量與合約存入之前的餘額比例來進行計算的。
2、而兌換操作swap會調用黑客的合約,此時黑客第一次重入調用deposit,並在此函數中二次重入,向合約打入250萬USDT。
3、二次重入結束後,合約會按照250萬USDT與之前合約的USDT餘額比值為黑客鑄幣,第一次重入的deposit函數運行結束後,黑客又向其中打入了250萬USDT。
4、此時,執行完了外層deposit函數中的兌換操作,合約又會按照250萬USDT與合約USDT餘額比值進行鑄幣。
5、問題就出在第四點,按理來說,第二次計算合約餘額應該是之前的餘額加上第一次打入的250萬餘額來作為本次計算的參數,但這裡是使用的重入的形式,合約餘額在最開始就已經獲取了,所以參數並未改變,還是使用的原來的餘額進行計算,導致給黑客鑄了大量的憑證代幣。
6、最後黑客移除憑證代幣,歸還閃電貸獲利。