21 марта 2022 года, по данным SlowMist Intelligence Zone, OneRing Finance стала жертвой эксплойта, в результате которого были убытки на сумму более 1,4 миллиона долларов. Это наш посмертный анализ инцидента.
Релевантная информация
One Ring — это кросс-стабильная платформа оптимизатора доходности с несколькими цепочками. Инцидент произошел в сети fanthom из-за использования флэш-кредита для завышения цены их токенов Oshare.
Адрес злоумышленника:
0x12efed3512ea7b76f79bcde4a387216c7bce905e
Транзакция атаки: https://ftmscan.com/tx/0xca8dd33850e29cf138c8382e17a19e77d7331b57c7a8451648788bbb26a70145
Контракт злоумышленника:
0x6a6d593ed7458b8213fa71f1adc4a9e5fd0b5a58
Атакуемый контракт:
OneRingVault: 0xc06826f52f29b34c5d8b2c61abf844cebcf78abf
Корень проблемы
OneRing напрямую использует резервы в паре для расчета цены токена OShare. Злоумышленник смог вызвать проскальзывание цены, когда использовал операцию свопа на OneRingValut. Это привело к неожиданному увеличению резервов пары, что привело к повышению цены OShare для создания искусственного обеспечения.
Детальный анализ
1. Злоумышленник сначала создал контракт на заимствование 80 000 000 долларов США у Solidity через срочный кредит.
2. Конвертировал USDC в токены miMatic, курс обмена токена был 1:1.001109876698508218.
3. DepositSafe , чтобы внести 79 999 997 (80 079 997,00 долларов США) USDC в контракт.
Как вы можете видеть вфункции depositSafe есть функция _deposit , а она вызывается _doHardWorkAll . В рамках этой функции цикл for используется для конвертации всех депонированных USDC в другие токены.
Затем DepositSafe создает около 41 965 509,691846094312718922 токенов OShare для злоумышленника. Мы видим, что цена OSShare равна 1062758591235248117.
Курс обмена значительно изменился, когда злоумышленник использовал два USDC для повторного обмена на токены miMATIC после свопа, как показано на изображении ниже.
4. Глядя на вывода , мы видим, что она также вызывает getSharePrice из расчета цены OSShare.
Давайте пройдем по этому пути и посмотрим, куда он нас приведет:
Здесь balanceWithInvested , и мы видим, что она следует за функцией investedBalanceInUSD .
В конце концов, на getUSDBalanceFromUnderlyingBalance в конечном итоге влияет функция
В getUSDBalanceFromUnderlyingBalance мы видим, что функция использует для расчета значения двух токенов в контракте, _reserves0 и _reserves1 . Из-за предыдущего свопа в пуле осталось большое количество USDC, поэтому в пуле осталось значительное количество USDC. Если количество USDC растет, _amount также будет расти, что приводит к увеличению текущей цены OSShare, полученной getSharePrice .
Глядя на рисунок ниже, мы видим, что текущая цена OShare составляет 1136563707735425848.
Далее, мы можем видеть из вывода ниже, что окончательная сумма вывода рассчитывается с помощью _withdraw .
После дополнительного расследования мы обнаружили, что _toWithdrawl также используется для расчета balanceWithInvested , что также вызывает рост цены.
Полученные 41 965 509 OSShare затем обмениваются на 8 153 475 010 1089 долларов США.
5. Наконец, они погасили кредит и сохранили разницу.
МистТрек
Согласно анализу MistTrack , злоумышленник обменял большую часть украденных средств на ETH и FTM. Затем они соединяют его обратно с Ethereum, прежде чем, наконец, внести более 521 ETH в TornadoCash. Первоначальные 0,1 Eth, использованные для финансирования смарт-контракта, также были переведены из TornadoCash.
На данный момент у хакера все еще есть около 45 000 долларов или около 15 ETH на его адрес ETH. Мы продолжим отслеживать и отслеживать любые перемещения с этого адреса.
Резюме
Этот инцидент был вызван мгновенным расчетом getUSDBalanceFromUnderlyingBalance в рамках MasterChefBaseStrategy контракта. Хакер использовал флэш-кредит, чтобы воспользоваться эксплойтом в контракте, который позволил им манипулировать ценой OShare. Команда безопасности SlowMist рекомендует проектам не использовать мгновенный расчет цен в будущем, чтобы избежать манипулирования ценами.
Переведена ЭТА статья
Релевантная информация
One Ring — это кросс-стабильная платформа оптимизатора доходности с несколькими цепочками. Инцидент произошел в сети fanthom из-за использования флэш-кредита для завышения цены их токенов Oshare.
Адрес злоумышленника:
0x12efed3512ea7b76f79bcde4a387216c7bce905e
Транзакция атаки: https://ftmscan.com/tx/0xca8dd33850e29cf138c8382e17a19e77d7331b57c7a8451648788bbb26a70145
Контракт злоумышленника:
0x6a6d593ed7458b8213fa71f1adc4a9e5fd0b5a58
Атакуемый контракт:
OneRingVault: 0xc06826f52f29b34c5d8b2c61abf844cebcf78abf
Корень проблемы
OneRing напрямую использует резервы в паре для расчета цены токена OShare. Злоумышленник смог вызвать проскальзывание цены, когда использовал операцию свопа на OneRingValut. Это привело к неожиданному увеличению резервов пары, что привело к повышению цены OShare для создания искусственного обеспечения.
Детальный анализ
1. Злоумышленник сначала создал контракт на заимствование 80 000 000 долларов США у Solidity через срочный кредит.
2. Конвертировал USDC в токены miMatic, курс обмена токена был 1:1.001109876698508218.
3. DepositSafe , чтобы внести 79 999 997 (80 079 997,00 долларов США) USDC в контракт.
Как вы можете видеть вфункции depositSafe есть функция _deposit , а она вызывается _doHardWorkAll . В рамках этой функции цикл for используется для конвертации всех депонированных USDC в другие токены.
Затем DepositSafe создает около 41 965 509,691846094312718922 токенов OShare для злоумышленника. Мы видим, что цена OSShare равна 1062758591235248117.
Курс обмена значительно изменился, когда злоумышленник использовал два USDC для повторного обмена на токены miMATIC после свопа, как показано на изображении ниже.
4. Глядя на вывода , мы видим, что она также вызывает getSharePrice из расчета цены OSShare.
Давайте пройдем по этому пути и посмотрим, куда он нас приведет:
Здесь balanceWithInvested , и мы видим, что она следует за функцией investedBalanceInUSD .
В конце концов, на getUSDBalanceFromUnderlyingBalance в конечном итоге влияет функция
В getUSDBalanceFromUnderlyingBalance мы видим, что функция использует для расчета значения двух токенов в контракте, _reserves0 и _reserves1 . Из-за предыдущего свопа в пуле осталось большое количество USDC, поэтому в пуле осталось значительное количество USDC. Если количество USDC растет, _amount также будет расти, что приводит к увеличению текущей цены OSShare, полученной getSharePrice .
Глядя на рисунок ниже, мы видим, что текущая цена OShare составляет 1136563707735425848.
Далее, мы можем видеть из вывода ниже, что окончательная сумма вывода рассчитывается с помощью _withdraw .
После дополнительного расследования мы обнаружили, что _toWithdrawl также используется для расчета balanceWithInvested , что также вызывает рост цены.
Полученные 41 965 509 OSShare затем обмениваются на 8 153 475 010 1089 долларов США.
5. Наконец, они погасили кредит и сохранили разницу.
МистТрек
Согласно анализу MistTrack , злоумышленник обменял большую часть украденных средств на ETH и FTM. Затем они соединяют его обратно с Ethereum, прежде чем, наконец, внести более 521 ETH в TornadoCash. Первоначальные 0,1 Eth, использованные для финансирования смарт-контракта, также были переведены из TornadoCash.
На данный момент у хакера все еще есть около 45 000 долларов или около 15 ETH на его адрес ETH. Мы продолжим отслеживать и отслеживать любые перемещения с этого адреса.
Резюме
Этот инцидент был вызван мгновенным расчетом getUSDBalanceFromUnderlyingBalance в рамках MasterChefBaseStrategy контракта. Хакер использовал флэш-кредит, чтобы воспользоваться эксплойтом в контракте, который позволил им манипулировать ценой OShare. Команда безопасности SlowMist рекомендует проектам не использовать мгновенный расчет цен в будущем, чтобы избежать манипулирования ценами.
Переведена ЭТА статья