慢雾分析Cream被盗1.3亿美金始末:利用借贷池缺陷,恶意操控价格_USD:SHARE币

作者: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池子中进行单币流动性添加,以获得相应的流动性凭证。紧接着攻击者就将获得的凭证抵押到yvWBTC池子中以获得yUSD凭证,为后续在CreamcrYUSD借贷池中抵押做准备。

慢雾创始人发布MetaMask浏览器插件失效解决法方案:2月16日,慢雾创始人在回复社区成员问题时,分享 MetaMask 浏览器插件无法启动解决法方案,在没有备份过助记词/私钥,同时重启插件/电脑均无法解决的情况下,可在电脑本地全局搜索 nkbihfbeogaeaoehlefnkodbefgpgknn,这是 MM 扩展 id,如这个目录下:

C:\\Users\\[User]\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Local Extension Settings

kbihfbeogaeaoehlefnkodbefgpgknn 找到 ldb/log 这些文件,在这些文件里找到如图目标内容。

后用 metamask.github.io/vault-decryptor/解开这段目标内容,Password 就是目标 MetaMask 扩展的密码。

若 MM 的任意扩展页面可以打开,比如:chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/home.html,则用下面的方式也有得到待解密的内容:

chrome.storage.local.get('data', result => {

var vault = http://result.data.KeyringController.vault

console.log(vault)

})[2023/2/16 12:10:14]

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

defil智能合约已通过慢雾科技安全审计:据官方消息,Filecoin去中心化借贷平台defil智能合约已通过慢雾科技SlowMist的安全审计。此次审计的智能合约包括矿工算力质押mFIL合约、以太坊映射eFIL合约、用户权益质押StakingDFL合约等多项均全部通过,投资者可至慢雾科技官网slowmist输入编号:NO. 0X002011230001 查询。

defil是基于Ethereum的Filecoin去中心化借贷协议。截止目前,平台已存入超过160万枚FIL,资产存入量约2.4亿美元,用户参与存FIL可获取利息收益以及平台治理通证DFL,DFL可继续进行Staking挖矿.[2021/5/19 22:18:35]

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

慢雾余弦:哪怕安全审计过的DeFi都可能存在权限过大风险:慢雾科技创始人今日发微博称,哪怕安全审计过的DeFi都可能存在权限过大风险,“权限过大”一直以来是个争议,就看这些权限是什么,比如常见的:铸币、销毁、升级、关键数值调整、关键权限变更、关键风控等等,“权限过大”极端了就可能就成为某种“后门”,这个是需要警惕的。DeFi项目方有责任解释“权限过大”的意图,透明出来;安全审计公司也有义务。[2020/9/2]

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

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

动态 | 慢雾:2020年加密货币勒索蠕虫已勒索到 8 笔比特币:慢雾科技反(AML)系统监测:世界最早的知名加密货币勒索蠕虫 WannaCry 还在网络空间中苟延残喘,通过对其三个传播版本的行为分析,其中两个最后一次勒索收到的比特币分别是 2019-04-22 0.0584 枚,2019-09-01 0.03011781 枚,且 2019 年仅发生一次,另外一个 2020 还在活跃,2020 开始已经勒索收到 8 笔比特币支付,但额度都很低 0.0001-0.0002 枚之间。这三个传播版本第一次发生的比特币收益都是在 2017-05-12,总收益比特币 54.43334953 枚。虽然收益很少,但 WannaCry 可以被认为是加密货币历史上勒索作恶的鼻主蠕虫,其传播核心是 2017-04-13 NSA 方程式组织被 ShdowBrokers(影子经纪人) 泄露第三批网络军火里的“永恒之蓝”(EternalBlue)漏洞,其成功的全球影响力且匿名性为之后的一系列勒索蠕虫(如 GandCrab)带来了巨大促进。[2020/2/23]

随后攻击者开始进行此次攻击的关键操作,其将约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被黑简要分析

王者开局偶遇猪队友——简析AlphaFinance&Cream被黑

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

水星链

[0:15ms0-0:876ms