概述
2023年4月13日,YearnFinance遭到黑客攻击,导致大约损失1000万美元。本文将分析攻击过程以及漏洞产生的原因。
攻击分析
这是一笔攻击交易:
https://etherscan.io/tx/0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d
攻击者从Balancer发起了闪电贷,借了500万DAI、500万USDC和200万USDT:
然后在Curve上,攻击者将500万DAI兑换成了695,000USDT,并将350万USDC兑换成151USDT:
攻击者调用IEarnAPRWithPool的recommend函数来检查当前的APR。此时,只有Aave的APR不等于0:
Yearn Finance或于20分钟前通过OTC购入价值150万美元的CRV:8月2日消息,据DeBank数据显示,Curve创始人于20分钟前从被标记为YFI:reserve的地址处收到150万枚USDT,旋即将150万枚USDT兑换为151万枚MIN后,再次偿还Abracadabra上151万枚MIM债务,赎回375万枚CRV并全部发送至YFI:reserve地址,或再次进行OTC交易,均价仍为单枚CRV0.4美元。[2023/8/2 16:14:35]
接下来,攻击者将800,000USDT转移到了攻击合约0x9fcc1409b56cf235d9cdbbb86b6ad5089fa0eb0f中。在该合约中,攻击者多次调用了Aave:LendingPoolV1的repay函数,帮助其他人偿还债务,以使Aave的APR等于0:
攻击者调用了yUSDT的deposit函数,抵押了900,000USDT,并获得了820,000yUSDT:
接下来,攻击者调用了bZxiUSDC的mint函数,使用156,000USDC铸造了152,000bZxiUSDC,并将其转移到了YearnyUSDT:
Yearn Finance宣布已上线以太坊扩展解决方案Arbitrum:2月24日,官方消息,收益聚合器项目Yearn Finance宣布已上线以太坊扩展解决方案Arbitrum,Yearn将在Arbitrum上推出一个单一的vault:Curve的triCrypto,代表一个Curve流动性池,持有等量的wBTC、wETH和USDT三个代币。[2022/2/24 10:12:01]
攻击者调用Yearn:yUSDT的withdraw函数,将820,000yUSDT兑换成1,030,000USDT。此时,合约中只剩下攻击者转移的bZxiUSDC:
接下来攻击者调用Yearn:yUSDT的rebalance函数,销毁bZxiUSDC:
然后攻击者向yUSDT合约转移了1/e6个USDT,并调用了deposit函数,抵押了10,000USDT,获得了1,252,660,242,850,000yUSDT:
yearn.finance利用Curve Finance上Iron Bank的流动性池推出新yVault:官方消息,yearn.finance宣布利用Curve Finance上Iron Bank的流动性池,推出一个新的yVault。
Cream Finance表示,该yVault策略使用Iron Bank中的cyDAI、cyUSDC和cyUSDT赚取稳定币,提高了利率。[2021/3/24 19:13:06]
然后在Curve上,攻击者将70,000yUSDT兑换成5,990,000yDAI,将4亿yUSDT兑换成4,490,000yUSDC,将1,240,133,244,352,200yUSDT兑换成1,360,000yTUSD:
然后在yearn:yDAI和yearn:yUSDC中分别调用withdraw,提取678万个DAI和562w万个USDC,并归还闪电贷:
Cover Protocol社区正在验证Yearn Finance索赔流程 索赔比例为36%:2月10日,DeFi保险协议Cover Protocol官方发布Yearn Finance索赔简报。根据简报,Yearn Finance就v1 yDAI vault攻击事件于2月4日提起了索赔。在接受索赔时其抵押共计409,722 DAI。当前该索赔状态为:正由社区和CVC验证。索赔支付比例为36%(部分支付),即1个索赔代币可兑换0.36 DAI。索赔支付时间为7天(含2天延迟)。此前消息,yearn v1 yDAI vault遭受攻击,随后Cover开启投票是否对Yearn漏洞提供保险。[2021/2/10 19:27:39]
漏洞分析
这次攻击中最关键的一点,是攻击者使用100,000USDT铸造了1,252,660,242,850,000个yUSDT。查看deposit函数的实现:
可以看到share的数量和变量pool相关,pool越小,share越大,而pool的值由_calcPoolValueInToken获得:
Yearn.Finance核心开发者:yearn v2 vaults已完成部署:EthHub联合创始人Eric Conner在推特上表示,根据Yearn.Finance核心开发者banteg在Discord上披露的信息,yearn v2 vaults已完成部署。[2020/12/6 14:14:43]
攻击者在调用rebalance函数后,合约中只存在了USDC,但是_balance()获取的是USDT的余额,USDC的余额并不计入其中,因此此时的pool为1:
这里显然是项目方的配置错误,yUSDT合约中应当都是USDT类的代币,但是其fulcrum变量却是USDC相关的bZxIUSDC代币,因此yUSDT中的USDC不计入balance中:
攻击者为什么能调用rebalance函数来burn掉bZxiUSDC代币呢?查看rebalance函数的实现:
可以看到在_withdrawFulcrum()中会存在redeem和burn操作,因此我们需要让"newProvider!=provider"成立,其中recommend()的实现:
攻击者通过控制IIEarnManager(apr).recommend(token)的返回值,使其为都为0来操控newProvider:
如何让其都为0呢,该函数的返回值和计算出的各个DeFi中的APR相关,由于Compound,bZx,dydx中没有池子,因此只需要控制Aave(Aave:LendingPoolCoreV1)即可:
要使其值返回为0,需要让apr.calculateInterestRates函数的第一个返回值为0:
即让currentLiquidityRate为0,该值和_totalBorrowsStable、_totalBorrowsVariable相关,当这两个个值都为0时,currentLiquidityRate为0:
_totalBorrowsVariable为0,即Aave:LendingPoolCoreV1此时没有人存在债务,为了达成这个条件,攻击者将池中所有人的债务进行了repay:
最后,攻击者让_totalBorrowsVariable变为0,所以它能够调用rebalance函数burn掉bZxiUSDC代币:
总结
此次Yearn攻击事件的根本原因是项目方的配置错误。攻击者通过一系列精妙的手法利用了该漏洞,最终获利大约1000万美元。
关于我们
AtEoceneResearch,weprovidetheinsightsofintentionsandsecuritybehindeverythingyouknowordon'tknowofblockchain,andempowereveryindividualandorganizationtoanswercomplexquestionswehadn'tevendreamedofbackthen.
了解更多:Website|Medium|Twitter
标签:USDUSDTSDTEARNbusd币历史最高价泰达币usdtapp下载usdt币怎么获取EverEarn ETH
简介SeiNetwork是未来的DeFi枢纽。它是一个layer-1区块链,Cosmos生态系统中的一个DeFi特定的订单簿协议,可利用各种功能来提高可扩展性,旨在成为未来金融系统的基础.
1900/1/1 0:00:00《淘宝禁售商品管理规范》近日对虚拟货币的相关产品进行了重新规范。据淘宝网4月10日消息,此次规则主要变更点为:明确了虚拟货币的生成定义范围;增加管控基于区块链技术生成的数字化产品的衍生服务.
1900/1/1 0:00:00开年不久,一款名为ChatGPT的聊天机器人火爆全网,上线仅用2个月就累计了超过1亿的活跃用户,成为史上用户增长最快的消费者应用程序.
1900/1/1 0:00:00Mar.2022,Daniel在过去的一年里,让人们对你的Web3项目或协议感兴趣已经变得越来越有挑战性。许多曾经充满希望的项目因为各种不同的原因,都在熊市中倒下了.
1900/1/1 0:00:00前言以太坊虚拟机是建立在以太坊区块链上的代码运行环境,合约代码可对外完全隔离并在EVM内部运行,其主要作用是处理以太坊系统内的智能合约.
1900/1/1 0:00:00加密货币交易平台火必Huobi在Web3.0领域的探索更进了一步。3月21日,据火必Huobi官方消息,火必宣布联合波场TRON、DMCLabs共同推出经多米尼克国政府授权的多米尼克元宇宙绑定代.
1900/1/1 0:00:00