Akropolis重入攻擊事件:攻擊者使用自己構造token導致合約使用相同差值鑄幣兩次
11月14日,慢霧發布DeFi協議Akropolis重入攻擊事件簡析。內容顯示:1. 攻擊者使用自己創建的token進行deposit,此時Akropolis合約會先記錄一次合約中所有代幣的總量;2. Akropolis合約調用用戶自己創建的token的transferFrom函數的時候,攻擊者在transferFrom函數中重入Akropolis合約的deposit函數,並轉入DAI到Akropolis合約中;3. 此時在重入的交易中,由於Akropolis合約會先獲取合約中所有代幣的總量,這個值和第一次調用deposit函數獲取的合約代幣總量的值一致;4. Akropolis合約計算充值前後合約中代幣總量的差值,攻擊者在充值DAI後,會得到一定量的Delphi token,獲得token的數量就是充值DAI的數量;5. 鑄幣完成後,流程回到第一次deposit往下繼續執行,這時合約會再次獲取合約中所有代幣的總量,這時由於在重入交易時,攻擊者已經轉入一定量的DAI,所以得到的代幣總餘額就是攻擊者在重入交易完成後的代幣總餘額;6. 此時合約再次計算差值,由於第一次deposit的時候合約中所有代幣的總量已經保存,此時計算出來的差值和重入交易中計算的差值一致,Akropolis合約再次鑄幣給攻擊者。總結:攻擊者使用自己構造的token,對Akropolis合約的deposit函數進行重入,導致Akropolis合約使用相同的差值鑄幣了兩次,但是只觸發了一次轉賬,當攻擊者提現的時候,就可以提兩倍的收益,從而獲利。
評論
推薦閱讀