By :yudan@慢霧安全團隊
據慢霧區訊息,2020 年 11 月 15 日,Value DeFi 的 Value DeFi MultiStables 保險庫遭遇閃電貸攻擊,慢霧安全團隊於第一時間跟進並進行相關分析,以簡要的形式呈現給大家,供大家參考。
背景提要
Value DeFi 協議是旨在為去中心化金融帶來公平、真實價值,以及創新的平臺與產品套件。他們遵循四個核心原則:增加獲取流動性挖礦收益的機會;提供下一代鏈上投票以進行治理; 其旗下的 Value Vaults 允許使用者存入一定量的鏈上資產後獲取收益。
攻擊流程簡析
1. 攻擊者首先從 Aave 中借出 80000 個 ETH,為攻擊做準備;
2. 攻擊者使用 80000 個 ETH 在 Uniswap WETH/DAI 池中用閃電貸借出大量的 DAI 和 在 Uniswap WETH/USDT 兌換出大量的 USDT;
3. 使用者呼叫 ValueMultiVaultBank 合約 的 deposit 合約使用第 2 步中小部分的 DAI 進行充值,ValueMultiVaultBank 合約中一共有 3 種資產,分別是 3CRV、bCRV、和 cCRV。ValueMultiVaultBank 合約在鑄幣的時候會將合約中的 bCRV, cCRV 轉換成以 3CRV 進行計價,轉化的途徑為 bCRV/cCRV -> USDC -> 3CRV。其中 USDC -> 3CRV 使用的是 DAI/USDC/USD 池中 USDC/3CRV 的價格。轉換完成後,Value Defi 合約根據合約中總的 3CRV 的價值和攻擊者充值的 DAI 數量計算 mVUSD 鑄幣的數量;
4. 攻擊者在 Curve DAI/USDC/USDT 池先使用第二步中剩餘的大部分 DAI 和 USDT 兌換 USDC,拉高 DAI/USDC/USDT 池中的 USDC/3CRV 的價格
5. 攻擊者在 ValueMultiVaultBank 合約中發起 3CRV 提現,此時 ValueMultiVaultBank 合約和第 3 步一樣,會先將合約中的 bCRV, cCRV 轉換成以 3CRV 計價,由於在第 4 步中,USDC/3CRV 的價格已經被拉高,導致換算的過程中,ValueMultiVaultBank 合約中的 bCRV, cCRV 能換算成更多的 3CRV,也就是說使用同等份額的 mVUSD 可以換取更多的 3CRV;
6. 拿到 3CRV 後,攻擊者到 Curve 的 DAI/USDC/USDT 池中使用 3CRV 換回 DAI,並在 Uniswap 中兌換回 ETH,然後歸還 Aave 的閃電貸 。
總結
由於 Value Defi 合約在鑄幣過程中將合約資產轉換成 3CRV 時依賴 Curve DAI/USDC/USDT 池 中 USDC/3CRV的價格,導致攻擊者可以透過操控 Curve DAI/USDC/USDT 池 中 USDC/3CRV 的價格來操控 mVUSD/3CRV 的價值,從而獲利。