shCream 被盗 1.3 亿美金始末:利用借贷池缺陷,恶意操控价格( 二 )
文章插图
我们跟进预言机的 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 前后变化:
文章插图
最后攻击者在借空其他池子后归还了闪电贷获利离场。
总结【 shCream 被盗 1.3 亿美金始末:利用借贷池缺陷,恶意操控价格】本次攻击是典型的利用闪电贷进行价格操控,由于 Cream 的借贷池在获取 yUSD 池子 share 价格时直接使用了其 pricePerShare 接口,而此接口是通过合约的抵押物余额与策略池抵押资产数额相加除总 share 数来计算单个 share 的价格的。因此用户直接往 yUSD 转入抵押物就可以很容易的拉高单个 share 价格,最终使得 Cream 借贷池中抵押物可以借出更多的资金。
推荐阅读
- 网联|网联元旦假期处理网络支付交易51.33亿笔、3.23万亿元
- 二维码支付|历史新高!元旦假期银联网络交易总额达1.32万亿元
- 支付|网联平台元旦假期处理跨机构网络支付交易51.33亿笔
- 笔数|创历史新高!银联网络元旦交易总金额达1.32万亿元
- 网络攻防|沃尔沃服务器遭勒索攻击研发信息被盗;360网络攻防靶场获数字城市优秀解决方案奖
- 商务厅|第十四届中国绿色食品博览会胜利闭幕意向签约11.35亿元
- 亚马逊公司|外媒:亚马逊涉嫌滥用市场支配地位被罚11.3亿欧
- 沃尔沃|沃尔沃承认数据泄露,部分研发数据被盗
- 木马病毒|你的微信可能被盯上了!瞬间就被盗号…这事别干
- 产品|西五街App产品体验报告