分析 Hedgey Finance 的合約漏洞

前幾天看到這篇推文:

所以就追了一下發生什麼事,這個 Hedgey Finance 是一個 DeFi 項目,看起來主要是幫忙團隊分發 token 的服務,推文裡的 transaction 是 0x2606d459a50ca4920722a111745c2eeced1d8a01ff25ee762e22d5d4b1595739 ,從 Tenderly Explorer 可以看到:

所以問題就變成:為什麼 ClaimCampaigns 會給 Attacker 這麼多 USDC allowance ?我們可以看 exploit contract 在 exploit 的前一個 tx 0xa17fdb804728f226fcd10e78eae5247abd984e0f03301312315b89cae25aa517 發生了什麼事:

問題是出在 ClaimCampaigns.createLockedCampaign() 裡,會先 SafeERC20.safeIncreaseAllowance這行) ,但是在 ClaimCampaigns.cancelCampaign() 的時候,用的是 transfer 而不是 transferFrom ,所以在這個 tx 執行完之後, ClaimCampaigns 對於 exploit contract 的 allowance 並沒有被清掉,所以下一個 tx 才能直接把 USDC 全部轉走。

其實在 Hedgey 的 Audits 頁面 可以看到有 Consensys Audit , audit 的目標是 commit hash 6a5ff58c2e83015b83c8de15f1cc61e9ac58f2c7 ,其實也是有 同樣的問題

最後 Hedgey 團隊的 修正 ,是把 safeIncreaseAllowance()createLockedCampaign() 移到 claimTokens()

Support Me