织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 区块链

慢雾:DeFi 平台 Cream Finance 再遭攻击,1.3 亿美元被盗(2)

时间:2021-10-28 18:11来源:未知 作者:admin 点击:
我们跟进 getHypotheticalAccountLiquidityInternal 函数,可以发现对于抵押物的价值获取来自 886 行的 oracle.getUnderlyingPrice。 我们跟进预言机的 getUnderlyingPrice 函数,

  我们跟进 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 借贷池中抵押物可以借出更多的资金。

  附:前两次 Cream Finance 被黑分析回顾

  慢雾:Cream Finance 被黑简要分析

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

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容