北京時間2022年6月16日,CertiK審計團隊監測到Inverse Finance遭受閃電貸攻擊,導致了約1068.215ETH(約126萬美元)的損失。
這是近2個多月內,Inverse Finance第二次遭遇閃電貸攻擊。在此前於2022年4月2日發生的那起閃電貸攻擊中,黑客成功獲利約1450萬美元。
目前1000枚ETH已被發送到Tornado Cash,黑客的錢包內還餘7.5萬美元。
攻擊步驟
①攻擊者從AAVE閃電貸出了27,000枚WBTC代幣。
②WBTC作為流動性被添加到Curve Pool中。
③獲得的LP代幣被存入Yearn的Vault。
④Yearn的Vault代幣作為Inverst Finance的抵押品,被存入Inverse Finance的Yearn 3Crypto Vault。
⑤然後,惡意的智能合約使用初始閃貸中剩餘的26,775枚WBTC(約5.69億美元),在Curve 3Crypto上換取7500萬USDT。 (WETH-USDT-WBTC)
⑥由於上述步驟操縱了價格預言機,因此抵押品的價格被拉高。隨後,攻擊者利用價格優勢借到價值1000萬美元的美元穩定幣(DOLA)。
⑦7500萬美元的USDT被26,626 WBTC換回。
⑧攻擊者的智能合約,用借來的DOLA向DOLA-3Pool的Curve Metapool提供流動性。
⑨之後流動性被移除,黑客換取了約1010萬的USDT, 這步驟的目的是把攻擊所得的DOLA換成USDT。
⑩最終黑客使用Curve上的3Crypto Pool將1000萬USDT轉換為451WBTC。剩餘的99,976.294美元被保存在攻擊者的智能合約中。
⑪償還AAVE上的閃電貸。
漏洞分析
被攻擊的合約使用YVCrv3CryptoFeed作為Inverse Finance DOLA借貸池的價格預言機。 YVCrv3CryptoFeed價格預言機返回的價格會根據Curve USDT-WBTC-WETH池中不同代幣的餘額來決定Yearn的Vault代幣價格,因此可被攻擊者操縱。
資產去向
攻擊者在合約上留下了53.244枚WBTC和99,997.294枚USDT,並在他們的合約上調用了`withdrawERC20()`函數,隨後將其撤回。 WBTC被換成了983.290枚以太幣,USDT被換成了84.925枚以太幣,總計1068.215枚以太幣。隨後,1000枚以太幣通過多次交易被發送到Tornado Finance,至此黑客結束操作。
Inverse Finnace表示,目前已暫停了借貸,沒有用戶的資金會被拿走或者面臨風險,此次事件也正在進一步調查當中,等待提供更多的細節。
寫在最後
價格預言機導致價格被操縱是一個常見問題,通過審計,我們可以發現Inverse Finance的風險。在此,CertiK的安全專家建議:
1. 使用Chainlink作為價格預言機。
2. 使用time weighted average price的價格作為價格預言機。
3. 如果上述價格預言機都不可行,借貸平台應該保障“提供抵押品”和“借款”不在一個Block裡面完成, 以此來減少被閃電貸攻擊的可能性。
攻擊發生後,CertiK的推特預警賬號以及官方預警系統已於第一時間發布了消息。同時,CertiK也會在未來持續於官方公眾號發布與項目預警(攻擊、欺詐、跑路等)相關的信息。