北京时间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也会在未来持续于官方公众号发布与项目预警(攻击、欺诈、跑路等)相关的信息。