Cream Finance 攻击事件分析

创宇区块链安全实验室
创宇区块链安全实验室 机构得得号

Oct 29, 2021 专注构建区块链安全生态,致力于让人类进入安全的区块链世界。

摘要: 北京时间10月27日晚,以太坊 DeFi 协议 Cream Finance 再次遭到攻击,损失高达 1.3 亿美元。

前言

北京时间 10 月 27 日晚,以太坊 DeFi 协议 Cream Finance 再次遭到攻击,损失高达 1.3 亿美元。知道创宇区块链安全实验室第一时间跟踪本次事件并分析。

分析

基础信息

攻击者:0x24354D31bC9D90F62FE5f2454709C32049cf866b

攻击 tx:0x0fe2542079644e107cbf13690eb9c2c65963ccb79089ff96bfaf8dced2331c92

攻击合约 1:0x961D2B694D9097f35cfFfa363eF98823928a330d

攻击合约 2:0xf701426b8126BC60530574CEcDCb365D47973284

流程

1、攻击者调用攻击合约1 0x961D 的 0x67c354b5 函数启动整个攻击流程,首先通过 MakerDAO 闪电贷借来 500M DAI,然后质押兑换成 yDAI,将 yDAI 在 Curve ySwap 中添加流动性获得 ySwap Token 凭证,再用于质押兑换成 yUSD,最后在 Cream 中存入 yUSD 获得凭证 crYUSD;

2、随后攻击合约1 0x961D 调用攻击合约2 0xf701 的 flashLoanAAVE() 函数,先通过 AAVE 闪电贷借来 524102 WETH,其中 6000 WETH 转给攻击合约10x961D,剩下 WETH 存入 Cream 获得 crETH。随后三次从 Cream 借出 446758198 yUSD,前两次借出后再次存入 Cream 获得 crYUSD 并转给攻击合约 1 0x961D,第三次直接将借出的 yUSD 转给攻击合约 1 0x961D,用于后面赎回;

3、flashLoanAAVE() 函数紧接着调用攻击合约 1 0x961D 的 0x0ed1ecb1 函数,通过 UniswapV3 和 Curve 完成 WETH => USDC => DUSD 的兑换,通过 YVaultPeak 合约用 383317 DUSD 赎回了 3022172 yUSD,加上第二步攻击合约 2 0xf701 转来的 446758198 yUSD,在 ySwap 中赎回约 450228633 ySwap Token 凭证。
并将其全部转给 yUSD 合约,导致 Cream 协议对抵押资产 yUSD 的价值计算剧增,最后借出大量 ETH、CRETH2、xSUSHI 等共 15 种资产,其中 ETH 转给攻击合约 2 0xf701 用于归还闪电贷;

4、最后赎回各资产成 DAI,归还闪电贷。

细节

此次攻击的核心代码原因在于 PriceOracleProxy 喂价合约对抵押资产的价值计算出现问题,价格因子 pricePerShare 通过简单的资产数额占比来动态定价,而这种方式容易受到闪电贷的大额资产操控。

此次攻击的成因是多维度的,同样也反映出其他很多问题,比如 Cream 协议允许 yUSD 的重复循环地存入和借出(Cream 中计入的资产可远超其实际流通量)、ySwap 的凭证可直接转给 yUSD (导致 Cream 中抵押资产价值剧增的直接原因)等等。

总结

Cream Finance 遭遇的闪电贷攻击的核心原因在于对抵押物价值的计算易被操控,使得攻击者通过闪电贷的巨额资金抬高了抵押物的价格,而超额借出了 Cream 金库的资产。

近期,各类合约漏洞安全事件频发,合约审计、风控措施、应急计划等都有必要切实落实。

作者:创宇区块链安全实验室;来自链得得内容开放平台“得得号”,本文仅代表作者观点,不代表链得得官方立场凡“得得号”文章,原创性和内容的真实性由投稿人保证,如果稿件因抄袭、作假等行为导致的法律后果,由投稿人本人负责得得号平台发布文章,如有侵权、违规及其他不当言论内容,请广大读者监督,一经证实,平台会立即下线。如遇文章内容问题,请联系微信:chaindd123

链得得仅提供相关信息展示,不构成任何投资建议
本文系作者 创宇区块链安全实验室 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(0

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信