2020 年10 月26 號,據慢霧區消息Harvest Finance 項目遭受閃電貸攻擊,損失超過400 萬美元。以下為慢霧安全團隊對此事件的簡要分析。 1. 攻擊者通過Tornado.cash 轉入20ETH 作為後續攻擊手續費2. 攻擊者通過UniswapV2 閃電貸借出巨額USDC 與USDT 3. 攻擊者先通過Curve 的exchange_underlying 函數將USDT 換成USDC,此時Curve yUSDC池中的investedUnderlyingBalance 將相對應的變小4. 隨後攻擊者通過Harvest 的deposit 將巨額USDC 充值進Vault 中,充值的同時Harvest 的Vault 將鑄出fUSDC,而鑄出的數量計算方式如下: amount.mul (totalSupply()).div(underlyingBalanceWithInvestment()); 計算方式中的underlyingBalanceWithInvestment 一部分取的是Curve 中的investedUnderlyingBalance 值,由於Curve 中investedUnderlyingBalance 的變化將導致Vault 鑄出更多的fUSDC 5. 之後再通過Curve 把USDC 換成USDT 將失衡的價格拉回正常6. 最後只需要把fUSDC 歸還給Vault 即可獲得比充值時更多的USDC。 7. 隨後攻擊者開始重複此過程持續獲利其他攻擊流程與上訴分析過程類似參考交易哈希:0x35f8d2f572fceaac9288e5d462117850ef2694786992a8c3f6d02612277b0877 總結:此次攻擊主要是Harvest Finance 的fToken(fUSDC、fUSDT...) 在鑄幣時採用的是Curve y池中的報價(即使用Curve 作為餵價來源),導致攻擊者可以通過巨額兌換操控預言機的價格來控制Harvest Finance 中fToken 的鑄幣數量,從而使攻擊者有利可圖。