慢雾:OneRing Finance 被黑分析

区块链安全 2年前 (2022) admin
542 0 0

By:小白@慢雾安全团队


2022 年 3 月 21 日,据慢雾区消息,OneRing Finance 存在严重漏洞遭到攻击,黑客获利约 1,454,672.244369 USDC(约 146 万美元),慢雾安全团队第一时间介入分析,并将结果分享如下:


相关信息


OneRing Finance 是一个去中心化应用程序(DApp),它支持加密货币的质押挖矿。用户可以存入代币来获取收益。


以下是本次攻击涉及的相关地址:


攻击者地址:

0x12efed3512ea7b76f79bcde4a387216c7bce905e


攻击交易:https://ftmscan.com/tx/0xca8dd33850e29cf138c8382e17a19e77d7331b57c7a8451648788bbb26a70145


攻击合约:

0x6a6d593ed7458b8213fa71f1adc4a9e5fd0b5a58


被攻击合约:

OneRingVault:0xc06826f52f29b34c5d8b2c61abf844cebcf78abf


攻击核心点


OneRing 直接使用了 Pair 中的 reserves 参与 OShare 的价格计算,攻击者利用 OneRingVault 正常的业务逻辑进行巨额的 Swap 操作产生的大滑点,使得 Pair 中的 reserves 非预期的增加,从而拉高了 OShare 的价格,导致相同数量的 OShare 可以取出更多的资金。


具体细节分析


1. 攻击者构造了攻击合约,利用闪电贷从 Solidity 借出 80000000 个 USDC 到攻击合约中


慢雾:OneRing Finance 被黑分析

2. 接着通过 swap 函数将 1 个 USDC 兑换成 miMatic 代币,这里可以看到当前代币兑换率是 1:1.001109876698508218


慢雾:OneRing Finance 被黑分析

3. 调用 depositSafe 函数将 79,999,997($80,079,997.00)个 USDC 充值进合约


慢雾:OneRing Finance 被黑分析


慢雾:OneRing Finance 被黑分析

这里 depositSafe 函数会内部调用 _deposit 函数,_deposit 函数会调用 _doHardWorkAll 函数,在该函数中会使用 for 循环将部分存入的 USDC 全部兑换成其他的代币


慢雾:OneRing Finance 被黑分析

然后 depositSafe 将约 41,965,509.691846094312718922 个 OShare 代币 mint 给攻击者。此时我们可以看到 OShare 的价格是 1062758591235248117 这个值


慢雾:OneRing Finance 被黑分析


从下面这张图中可以看出在 swap 后攻击者使用两个 USDC 再次兑换 miMATIC 代币时此时的兑换率已经产生巨大变化:


慢雾:OneRing Finance 被黑分析


4. 然后调用 withdraw 函数。我们可以看到 withdraw 函数也调用了getSharePrice 函数进行 OShare 的价格计算


慢雾:OneRing Finance 被黑分析

我们来看 getSharePrice 函数:


慢雾:OneRing Finance 被黑分析


这里调用了 balanceWithInvested 函数,继续跟进发现调用了 investedBalanceInUSD 函数:


慢雾:OneRing Finance 被黑分析


这里可以看到最终影响价格的是 getUSDBalanceFromUnderlyingBalance 函数


慢雾:OneRing Finance 被黑分析


在 getUSDBalanceFromUnderlyingBalance 函数中我们可以看到,该函数使用合约中两个代币的数量  _reserves0 和 _reserves1 这两个值进行计算,由于之前的 swap 导致大量的 USDC 留在池子中,所以导致池子中的 USDC 数量变大,从而使 _amount 变大,这就导致了 getSharePrice 函数获取到的当前 OShare 的价格变大了


慢雾:OneRing Finance 被黑分析


由下图我们可以看到当前的 OShare 的价格为 1136563707735425848 这个值:


慢雾:OneRing Finance 被黑分析


从下面的 withdraw 函数中可以看出最终的提现数量是通过 _withdraw 进行计算得出的


慢雾:OneRing Finance 被黑分析


跟进去后发现 _toWithdraw 也是由 balanceWithInvested 计算得出的,这也就导致这个值变大


慢雾:OneRing Finance 被黑分析


然后会在这一步将攻击者持有的 41965509 个 OShare 兑换为 81534750101089 个 USDC


慢雾:OneRing Finance 被黑分析


5. 攻击者归还闪电贷后获利离场


MistTrack


据慢雾 MistTrack 分析,攻击者将获利的部分 USDC 换成 FTM、ETH,最后将 USDC、ETH 跨链到以太坊。同时,以太坊上黑客地址初始资金来自于 Tornado.Cash 转入的 0.1 ETH,接着黑客将 521 ETH 转入 Tornado.Cash。


截止目前,黑客以太坊地址仍有近 4.5 万美元,包括 14.86 ETH 和 100.29 USDC。慢雾 MistTrack 将持续监控黑客地址。


慢雾:OneRing Finance 被黑分析

总结


本次攻击是由于在 MasterChefBaseStrategy 合约中的 getUSDBalanceFromUnderlyingBalance 函数实时储备量进行计算导致攻击者可以利用闪电贷制造巨大差值从而获利。慢雾安全团队建议在进行 share 的价格计算时不要使用实时储备量进行计算,避免再次出现此类事故。


往期回顾

链上追踪:洗币手法科普之 Tornado.Cash

故技重施 —— Hundred Finance 被黑分析

大意失荆州 —— Paraluni 被黑分析

“零元购” —— TreasureDAO NFT 交易市场漏洞分析

链上追踪:洗币手法科普之 Peel Chain

慢雾:OneRing Finance 被黑分析

慢雾导航


慢雾科技官网

https://www.slowmist.com/


慢雾区官网

https://slowmist.io/


慢雾 GitHub

https://github.com/slowmist


Telegram

https://t.me/slowmistteam


Twitter

https://twitter.com/@slowmist_team


Medium

https://medium.com/@slowmist


知识星球

https://t.zsxq.com/Q3zNvvF


原文始发于微信公众号(慢雾科技):慢雾:OneRing Finance 被黑分析

版权声明:admin 发表于 2022年3月22日 下午10:49。
转载请注明:慢雾:OneRing Finance 被黑分析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...