BeanExploit
大致流程
攻击者创建了一个恶意提案,然后给这个提案投票,由于攻击者利用闪电贷获取了很多资金。项目合约中propose存在问题,只判断地址的资金,导致恶意提案被执行。
这个漏洞的分析参考这个:https://learnblockchain.cn/article/3909
本次的漏洞复现用了很多的技术,包括 aave,uniswap,sushiswap的flosh loan. crv的各种操作。值的复现。
复现流程
这里根据攻击者的操作分为以下几步
1.攻击者在通过UniswapV2将73 ETH兑换为212k BEAN。
https://etherscan.io/tx/0xfdd9acbc3fae083d572a2b178c8ca74a63915841a8af572a10d0055dbe91d219
From Uniswap V2: Router 2To Uniswap V2: BEAN 3 For 73 ($194,631.87)Wrapped Ethe... (WETH)
From Uniswap V2: BEAN 3To Beanstalk Flashloan Exploiter For 212,858.495697 ($12,916.58)Bean (BEAN)https://etherscan.io/tx/0xcd314668aaa9bbfebaf1a0bd2b6553d01dd58899c508d4729fa7311dc5d33ad7
2.通过闪电贷从Aave平台借入350M DAI,500M USDC以及150M USDT,从Uniswap平台借贷32.1M BEAN,从SushiSwap平台借入11.6M LUSD
From Aave: aDAI Token V2To BeanstalkFlashloanContract For 350,000,000 ($350,350,000.00)Dai Stableco... (DAI)
From Aave: aUSDC Token V2To BeanstalkFlashloanContract For 500,000,000 ($499,924,500.00)USD Coin (USDC)
From Aave: aUSDT Token V2To BeanstalkFlashloanContract For 150,000,000 ($150,150,000.00)Tether USD (USDT)
From Uniswap V2: BEAN 3 To BeanstalkFlashloanContract For 32,100,950.626687 ($4,252,333.27)Bean (BEAN)
From SushiSwap: LUSD-OHMTo BeanstalkFlashloanContract For 11,643,065.703498478902362927 ($11,641,596.71)LUSD Stablec... (LUSD)3.将借入的DAI、USDC以及USDT全部投入到Curve DAI/USDC/USDT流动性矿池中,铸造出979,691,328个流动性代币3Crv。
7.将15M 3Crv兑换成15,251,318 LUSD
8.将964,691,328 3Crv添加流动性获得795,425,740 BEAN3CRV-f
9.将32,100,950 BEAN以及26,894,383 LUSD添加流动性,获取58,924,887BEANLUSD-f
10.使用上面得到的所有BEAN3CRV-f,BEANLUSD-f提案进行投票,使提案通过并执行。
11.调用BIP18
12.然后获得了36,084,584 BEAN,0.5407 UNI-V2,874,663,982 BEAN3CRV-f以及60,562,844 BEANLUSD-f
13,删除 874,663,982 CRV 单一流动性,以获得 1,007,734,729 CRV 代币
14.删除 60562844 BEANLUSD-f 单一流动性,以获得 28149504 LUSD
15.归还SushiSwap闪电贷的11,678,100 LUSD
16.将 32197543 BEAN 的闪存返回到 Uniswap V2 包含手续费
17.将剩余的16,471,404 LUSD兑换成16,184,690 3Crv。
18.移除511,959,710.180617886302214702 3Crv流动性,得到522,487,380 USDC,365,758,059 DAI以及156,732,232 USDT。
19.向Aave平台分别存入350,315,000 DAI,500,450,000 USDC以及150,135,000 USDT用于偿还闪电贷以及手续费。
20.移除0.5407 UNI-V2的流动性,获得10,883 WETH以及32,511,085 BEAN并归还闪电贷的金额以及手续费。
我们也只复现到这一步。合约中写了运行到那一步的序号,复现如下
poc:https://github.com/8olidity/DeFiVulhub/tree/main/BEANSTALK
参考: https://github.com/JIAMING-LI/BeanstalkProtocolExploit/
https://blockapex.io/beanstalk-hack-analysis-poc/
https://github.com/Rivaill/CryptoVulhub/blob/master/BeanstalkFarms20220417
https://learnblockchain.cn/article/3921
Last updated