Cream 第三次被攻击策略

攻击合约地址1

0x961d2b694d9097f35cfffa363ef98823928a330d

攻击合约地址2

0xf701426b8126BC60530574CEcDCb365D47973284

攻击者账号

0x24354d31bc9d90f62fe5f2454709c32049cf866b

CREAME的yUSD喂价方式

yUSD的价格 = Curve Y Pool yVaul * yUSD的pricepershare

pricepershare ~= yVaul 的yUSD的balance/ total yUSD

攻击流程

1. 攻击合约1通过MakerDAO闪电贷借500000000个DAI

2. 把500000000个DAI存入YFI池子里,获得451065927个yDAI

3. 让后把451065927个yDAI存入curve 的Y池里(curve针对YFI的稳定币兑换池,包含yDAI+yUSDC+yUSDC+yTUSD)

4. 然后得到447,202,022 个Curve.fi y池代币(4 pool token)

5. 4 pool token都存到Curve Y Pool yVault (yUSD)池子里,得到446,756,774个yUSD

6. yUSD存款到cream里,调用cream的ctoken合约存款(得到22,337,774个cryUSD)

7. 攻击2合约通过aave闪电贷524,102个ETH并转6000个ETH给攻击1合约

8. 攻击2合约再把剩下的518102个ETH存款到cream,获得一定量存款crETH

9. 攻击2合约通过eth存款,借出446,758,198个yUSD

10. 再把446,758,198个yUSD存起来,得到22,337,845,550个cryUSD(cream的yUSD存款凭证)

11. 攻击2合约把22,337,845,550 cryUSD转给攻击1地址

12. 攻击2地址再借出446,758,198个yUSD,再存起来,得到22,337,845,550个cryUSD

13. 攻击2合约把22,337,845,550 cryUSD转给攻击1地址

14. 攻击2地址再借出446,758,198个yUSD

15. 攻击2地址把446,758,198个yUSD 转给攻击1地址

16. 这时攻击合约1有15亿美金的cryUSD,和价值5亿美金的Yusd

17. 攻击合约1通过uniswap把ETH换成USDC,在通过curve(3crv)的池子把USDC换成DUSD,接着把DUSD都存到Curve Y Pool yVault (yUSD)池子里,得到Yusd

18. 然后通过yUSD合约调用withdaw,得到4pool token

19. 把4pool token 交易到 yUSD合约,根据cream 的 yUSD喂价逻辑,yUSD的价格成倍上涨

20. 由于yUSD价格翻倍,本身价值15亿美元的抵押品,变成了价值30亿美金

21. 攻击合约1通过30亿美金的cryUSD(存款凭证)借出523208个eth(将近20亿u),并结合之前剩余的给攻击合约2还AAVE的ETH闪电贷费用

22. 剩余的抵押价值借出cream平台的各种代币(该部分收益全归黑客所有)

23. 最后还掉攻击合约1从MakerDAO借的5亿的DAI

原因总结:

核心在于cream给yUSD的喂价逻辑问题,yUSD价格有被操控的风险

解决方案:

1.采用chainlink预言机喂价

2.增加借贷的风控限制

Last updated