USD:细节分析:DeFi 平台Cream Finance 再遭攻击,1.3 亿美金被盗

By:Kong@慢雾安全团队

据慢雾区消息,2021年10月27日,CreamFinance再次遭受攻击,损失约1.3亿美金,慢雾安全团队第一时间介入分析,并将简要分析分享如下。

攻击核心

本次攻击的核心在于利用Cream借贷池对抵押物价格获取的缺陷,恶意操控拉高了其抵押物的价格,使得攻击者可以从Cream借贷池借出更多的代币。

攻击细节

首先攻击者从DssFlash中闪电贷借出5亿个DAI,随后将借出的5亿个DAI抵押至yearn的yDAI池中,以获得约4.5亿个yDAI凭证。

随后攻击者将获得的yDAI代币在Curve的yDAI/yUSDC/yUSDT/yTUSD池子中进行单币流动性添加,以获得相应的流动性凭证。紧接着攻击者就将获得的凭证抵押到yUSD池子中以获得yUSD凭证,为后续在CreamcrYUSD借贷池中抵押做准备。

Illuvium确定土地销售细节,将主要采用荷兰式拍卖方式出售:5月2日消息,RPG链游Illuvium称上周理事会通过关于土地出售细节的IIP-20提案,主要将采用荷兰式拍卖方式出售土地,土地共10万块,首次可供出售的土地有2万块,共有5个等级,7个地区。

NFT会在ImmutableX上铸造。首批出售中,等级1至5的土地数量分别有12029、5012、2088、869、2个,等级1至4的土地初始价格分别为2、6、20、80,等级5将通过实时英式拍卖出售。Illuvium将于本周将公布具体的土地销售日期。[2022/5/3 2:46:20]

之后攻击者开始向Cream的crYUSD借贷池中抵押其获得yUSD凭证,为了扩大其抵押规模,攻击者从AAVE闪电贷借出约52.4万个WETH,并将其抵押到Cream的crETH池子中。

攻击者通过在crETH池子中抵押大量ETH,来使得其有足够的借贷能力将crYUSD池子中的yUSD全部借出并重复抵押到crYUSD池子中,随后通过在crYUSD池子中进行循环贷以杠杆的形式扩大了本身在crYUSD池子中yUSD的抵押规模,为后续操控价格获利做准备。

动态 | Blockstream透露比特币挖矿设施细节 富达应用科技中心和LinkedIn创始人是早期客户:区块链技术公司Blockstream透露了他们在加拿大魁北克和佐治亚州阿德尔的大量比特币挖矿数据中心相关的细节。这些设施的总能耗为300兆瓦,除了Blockstream自己的挖矿业务外,它们目前还可用于托管企业级采矿活动。Blockstream计划在未来向小规模矿工开放设施。目前,他们的两位活跃客户包括富达应用技术中心(Fidelity Center for Applied Technology )和LinkedIn联合创始人Reid Hoffman。此外,Blockstream还将很快推出第一个挖矿池,重点是通过BetterHash协议将更多的电力重新投入到个体矿工手中。(福布斯)[2019/8/9]

随后为了获得yDAI/yUSDC/yUSDT/yTUSD4Pool凭证以操控价格,攻击者用约1,873个ETH从UniswapV3中兑换出约745万个USDC,并通过Curve3Pool将其兑换成DUSD代币约338万个。

声音 | 赵东:Bitfinex的确有发币计划,但细节未定:赵东刚刚发微博称:Bitfinex的确有发币计划,但细节未定,目前任何假借Bitfinex名义搞代投、说有额度的都可能是子,警惕![2019/4/30]

接下来攻击者通过获得的DUSD代币从YVaultPeak中赎回yDAI/yUSDC/yUSDT/yTUSD4Pool凭证,并利用此凭证从yUSD池子中取回yDAI/yUSDC/yUSDT/yTUSD代币。

随后攻击者开始进行此次攻击的关键操作,其将约843万个yDAI/yUSDC/yUSDT/yTUSD代币直接转回yUSD池子中,由于其不是通过正常抵押操作进行抵押的,所以这843万个yDAI/yUSDC/yUSDT/yTUSD代币并没有被单独记账,而是直接分散给了yDAI/yUSDC/yUSDT/yTUSD凭证的持有者,这相当于直接拉高了其share的价格。

声音 | Augur官方:即将发布v2合同变更的最终细节:据Medium消息,4月4日,Augur官方发布周报称,在接下来的几天里,将发布v2合同变更的最终细节。Augur App已发布v1.11.0和v1.11.1,解决市场结束时间和市场细节之间的差异问题,更突出显示市场何时结束,以帮助交易者理解市场关于何时因时区或结束时间问题而可能导致无效的定义;还推出修补程序,修复用户在提供初始报告时遇到的错误。[2019/4/5]

在crToken中由于其抵押物价格被恶意拉高了,因此攻击者抵押的大量yUSD可以使其借出更多的资金,最后攻击者将Cream的其他15个池子全部借空。接下来我们跟进Cream的crToken借贷池中具体借贷逻辑。

从cToken合约中我们可以看到,主要借贷检查在borrowAllowed函数中:

我们跟进borrowAllowed函数,可以看到在427行,其会根据getHypotheticalAccountLiquidityInternal函数检查实时状态下的该账户所对应的所有cToken的资产价值总和和借贷的资产价值总和,并通过对比cToken的资产价值和借贷的Token价值和,来判断用户是否还可以继续借贷。

高盛和Square利好消息的关键细节可能会冷却加密货币多头的热情:随着加密货币多头为关于高盛和Square的消息欢呼,比特币一度超过9600美元关口,但一些关键细节可能会冷却市场热情。此前纽约时报报道称,高盛表示,比特币不是局,将推出比特币合约交易。但彭博援引知情人士称,高盛并不是买卖真正的比特币,该公司计划通过提供数量有限的衍生品开始小规模的交易。此外,市场也因Square公布的与加密货币有关的3400万美元收入欢呼,但细节显示,去除成本,该公司只从加密货币出售中赚了约20万美元。[2018/5/4]

我们跟进getHypotheticalAccountLiquidityInternal函数,可以发现对于抵押物的价值获取来自886行的oracle.getUnderlyingPrice。

我们跟进预言机的getUnderlyingPrice函数,可以容易的发现其将通过代币150行的getYvTokenPrice函数进行价格获取。

继续跟进getYvTokenPrice函数,由于yvTokenInfo.version为V2,因此将通过yVault的pricePerShare函数进行价格获取。

跟进pricePerShare可以发现其直接返回了_shareValue作为价格,而_shareValue是通过_totalAssets除合约的总share数量(self.totalSupply)来计算单个share的价格的。因此攻击者只需要操控_totalAssets将其拉高就可以提高单个share的价格从而使得攻击者的抵押物价值变高以借出更多的其他代币。

我们可以查看下_totalAssets是如何获取的,从772行我们可以很清晰的看到,_totalAssets是直接取的当前合约的yDAI/yUSDC/yUSDT/yTUSD代币数量,以及抵押在策略池中的资产数额相加获得的。因此攻击者通过直接往yUSD合约中转入yDAI/yUSDC/yUSDT/yTUSD代币就可以拉高share价格从而完成获利。

通过Ethtx.info可以清晰的看到pricePerShare前后变化:

最后攻击者在借空其他池子后归还了闪电贷获利离场。

总结

本次攻击是典型的利用闪电贷进行价格操控,由于Cream的借贷池在获取yUSD池子share价格时直接使用了其pricePerShare接口,而此接口是通过合约的抵押物余额与策略池抵押资产数额相加除总share数来计算单个share的价格的。因此用户直接往yUSD转入抵押物就可以很容易的拉高单个share价格,最终使得Cream借贷池中抵押物可以借出更多的资金。

附:前两次CreamFinance被黑分析回顾

慢雾:CreamFinance被黑简要分析

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

[0:0ms0-0:981ms