前言 北京时间 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 转给攻击合约 1?0x961D,剩下 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 金库的资产。 近期,各类合约漏洞安全事件频发,合约审计、风控措施、应急计划等都有必要切实落实。 查看更多 —- 编译者/作者:知道创宇区块链安 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
CreamFinance攻击事件分析
2021-10-29 知道创宇区块链安 来源:区块链网络
LOADING...
相关阅读:
- 比特币会在1月内达到13万美元吗?2021-10-29
- 港卡怎么出金?屎币狗币谁更疯狂?大有以酒洗面的感受;蛋总亏钱的经历2021-10-29
- 传统合约与智能合约的区别2021-10-28
- 为什么模块化区块链是最佳扩展解决方案?2021-10-28
- 技术解读:高效的链上动态 Merkle Tree2021-10-28