Balancer: Compound金融模型漏洞 (3)
大约 3 分钟
Balancer: Compound金融模型漏洞 (3)
2020年6月30日,攻击者从dYdX闪电贷中借到代币并铸币后,通过uniswap闪贷获得cWBTC和cBAT代币,然后将借得的代币在Balancer代币池中大量交易,从而触发Compound协议的空投机制,获得空投的COMP代币,再使用Balancer有漏洞的gulp()函数更新代币池数量后,取走所有代币并归还闪电贷。攻击者相当于利用了Compound协议的金融模型、闪电贷和Balancer代码漏洞,无中生有了COMP,总获利约为11.5ETH。
而正是在前一天,Balancer流动性池遭闪电贷攻击,损失了50万美金。
使用Tokenview区块浏览器查看被攻击的hash:0x70959fef9d7cc4643a0e885f66ec21732e9243ffd3773e4a9ea9b5ab669bab4d
### Balancer被攻击的步骤
- 从dYdX处通过闪电贷形式借得WETH、DAI和USDC三种代币,数额分别是103067.20640667767WETH、5410318.972365872DAI和5737595.813492USDC。
- 使用步骤1中得到的代币,在Compound中借贷cETH、cDAI和cUSDC,也就是对三种代币 (cETH、cDAI和cUSDC) 进行铸币操作 (mint),量为5,150,226.00337039cETH,264,123,046.64278978cDAI,272,429,456.68851376cUSDC。
- 从Compound处通过闪电贷借得WBTC、BAT,数额分别是1380WBTC、49000000BAT。
- 使用步骤3中得到的代币,在Compound中借贷cWBTC、cBAT,也就是铸造 (mint) cWBTC,cBAT代币。量为68,474.79460157cWBTC,2,407,985,254.35853495cBAT。
- 携带获得的cWBTC与cBAT加入Balancer的代币池,此时攻击者拥有的cWBTC和cBAT的数目分别为4955.85562685cWBTC和55144155.96523628cBAT。
- 分别用cWBTC和cBAT在Balancer的该代币池中进行大量的交易,从而触发COMP空投(Airdrop)操作,将这些空投的COMP分发到Balancer该代币池中。
- 调用gulp()函数将当前的COMP数目同步到Balancer智能合约中,并将cWBTC、cBAT以及额外被加入代币池中的COMP取出。退出代币池时,攻击者拥有的cWBTC和cBAT的数目同样为4955.85562685和55144155.96523628。但是由于在代币池中通过大量交易产生的额外COMP代币。此处攻击者还可以选择直接进入其他代币池中,复用步骤1到步骤6的攻击方法,获得额外COMP代币。
- 偿还Compound和dYdX的闪电贷,离场。
- 攻击者仍旧可以采用同样的方法(步骤1到步骤7),对其他代币池发动攻击。攻击的机制类似,但是通过闪电贷借得和用来进行攻击的代币种类略有不同。
最终攻击者将得到的1.413164269999604596COMP放到Uniswap交易为1.466344591877333617ETH离场。
同样的攻击hash2: 0xa519835c366bc77d93c9d3e433e653bfc46120688ad146b383f4dd93342cad29
使用Tokenview Defi浏览器查看流动性挖矿DeFi列表。