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借贷池中抵押做准备。
美国众议院共和党人要求SEC提供SBF被捕时间的细节:2月13日消息,美国众议院金融服务委员会的两位高级共和党成员Patrick McHenry和Bill Huizenga上周五致函美国证券交易委员会 (SEC) 主席Gary Gensler,要求他提供与针对SBF提出的投诉相关的记录。
共和党人表示,他们正在调查政府提出指控的时间,他们还要求提供美国证券交易委员会官员与司法部之间的通信,以及其他记录,“指控的时机和他的被捕引发了人们对SEC程序和与司法部合作的严重质疑”。
SBF原定于2022年12月13日在众议院委员会作证,但在前一天晚上被巴哈马当局逮捕。巴哈马官员表示,在司法部告知他们已对SBF提出欺诈指控后,他们逮捕了他们。去年12月12日,SEC执法主管Gurbir Grewal表示,该机构已单独授权对SBF提起民事诉讼。FTX现任首席执行官John Ray最终在没有SBF出席的情况下作证。(彭博社)[2023/2/13 12:03:16]
路透社:马斯克对推特的反诉细节或将于周五公开:8月4日消息,据主审法官、特拉华州衡平法院院长凯瑟琳·麦考密克(Kathleen McCormick)周三裁定,马斯克的反诉应在当地时间 8 月 5 日下午公布。
此前报道,特拉华州衡平法院法官 Kathaleen McCormick 在威尔明顿听证会上将推特(Twitter)诉马斯克(Elon Musk)案定于 10 月进行审判。(路透社)[2022/8/4 3:42:43]
之后攻击者开始向Cream的crYUSD借贷池中抵押其获得yUSD凭证,为了扩大其抵押规模,攻击者从AAVE闪电贷借出约52.4万个WETH,并将其抵押到Cream的crETH池子中。
攻击者通过在crETH池子中抵押大量ETH,来使得其有足够的借贷能力将crYUSD池子中的yUSD全部借出并重复抵押到crYUSD池子中,随后通过在crYUSD池子中进行循环贷以杠杆的形式扩大了本身在crYUSD池子中yUSD的抵押规模,为后续操控价格获利做准备。
Hindenburg Research提供100万美元赏金以获取揭示Tether支撑细节的信息:10月20日消息,卖空研究公司Hindenburg Research将提供高达100万美元的悬赏金,以获取可以揭示稳定币Tether支撑细节的信息。该公司表示,它对Tether的美元支撑“持怀疑态度”,并正在启动Hindenburg Tether赏金计划,以鼓励人们搜索此前未公开的相关细节。Hindenburg在周三的公告中特别强调,Tether声称其大部分储备是以商业票据形式持有的,但没有透露任何有关其交易对手的信息。(CoinDesk)[2021/10/20 20:44:14]
随后为了获得yDAI/yUSDC/yUSDT/yTUSD4Pool凭证以操控价格,攻击者用约1,873个ETH从UniswapV3中兑换出约745万个USDC,并通过Curve3Pool将其兑换成DUSD代币约338万个。
ZKSwap公布新产品L2.Cash细节:Layer 2去中心化交易所ZKSwap分享了新产品L2.Cash的细节。该产品可以免费使用,因为ZKSwap的所有Layer 2交易100%免费,用户仅为向Layer 1的存取款支付费用。L2.Cash应被称为零售交易的支付协议,因其是L2 Labs为零售用户和商家开发的第一个“开箱即用”的解决方案。由于zk-proof基础设施允许极低的交易延迟和L1/L2状态的完全一致性,L2.Cash可实现几乎即时的交易,确保所有ERC-20代币最大可达到1000 Tx/s的处理效率,同时声称拥有高效的空投功能:所有基于以太坊的代币都可以通过其工具免费分发,并可每秒钟向10个用户空投代币。此外,L2 Labs团队正在积极研究zk-rollups技术与EVM连接的可能性。在完成部署后,该工具将允许ZKSwap扩展到所有与EVM兼容的区块链。(U.Today)[2021/8/18 22:21:31]
声音 | 欧盟官员:仍需更多细节以监管Libra:金色财经报道,欧盟委员会执行副主席Valdis Dombrovskis周二发布的备忘录显示,欧盟仍在努力解决Libra的问题。根据他的说法,Libra尤其 “缺乏细节”。 Dombrovskis称,由于Libra仍然是一个项目,因此也是一个不断发展的目标,其所提供的信息仍然不足以确定Libra的确切性质,进而无法确定其与现行欧盟法律的关系。欧盟委员会希望“迅速采取行动”,为Libra、稳定币和其他欧盟加密资产项目制定法规。[2020/2/20]
接下来攻击者通过获得的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的价格。
在crToken中由于其抵押物价格被恶意拉高了,因此攻击者抵押的大量yUSD可以使其借出更多的资金,最后攻击者将Cream的其他15个池子全部借空。接下来我们跟进Cream的crToken借贷池中具体借贷逻辑。
从cToken合约中我们可以看到,主要借贷检查在borrowAllowed函数中:
我们跟进borrowAllowed函数,可以看到在427行,其会根据getHypotheticalAccountLiquidityInternal函数检查实时状态下的该账户所对应的所有cToken的资产价值总和和借贷的资产价值总和,并通过对比cToken的资产价值和借贷的Token价值和,来判断用户是否还可以继续借贷。
我们跟进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被黑简要分析
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。