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 的鑄幣數量,從而使攻擊者有利可圖。