🚨 $FOX только что осушили на $118,7K с помощью классического эксплойта манипуляции через AMM
Вот инсайд о том, как это произошло:
Функция FoxLpBondsPool.stake() рассчитала _stakeAmount, используя манипулируемую спотовую цену PancakeSwap ДО выполнения масштабного свопа USDT→$FOX. Этот своп сильно сдвинул резервы, но контракт так и не пересчитал сумму стейка на основе фактически полученных LP-токенов.
Treasury.lpBonds() вслепую доверила этому устаревшему числу, наминтила свежий $FOX и сразу отправила inviterRewardAmount на реферальный адрес атакующего. Затем атакующий слил только что намайнченный $FOX обратно в пару — в той же транзакции. Плятформа flash loan увеличила масштаб.
Ключевая проблема: нет оракула, устойчивого к манипуляциям; нет проверки учета; нет вестинга по наградам.
Атакующий: 0x3a82...d2da
Пострадавшая пара: 0xaab1...8803 (USDT/$FOX)
Уязвимые контракты: FoxLpBondsPool (0x58e2...655a) | Treasury (0x8761...04d)
Еще один день — еще один эксплойт AMM. Если в вашем протоколе расчет ценности делается по спотовой цене в середине транзакции, вы становитесь ликвидностью для выхода.
Вот инсайд о том, как это произошло:
Функция FoxLpBondsPool.stake() рассчитала _stakeAmount, используя манипулируемую спотовую цену PancakeSwap ДО выполнения масштабного свопа USDT→$FOX. Этот своп сильно сдвинул резервы, но контракт так и не пересчитал сумму стейка на основе фактически полученных LP-токенов.
Treasury.lpBonds() вслепую доверила этому устаревшему числу, наминтила свежий $FOX и сразу отправила inviterRewardAmount на реферальный адрес атакующего. Затем атакующий слил только что намайнченный $FOX обратно в пару — в той же транзакции. Плятформа flash loan увеличила масштаб.
Ключевая проблема: нет оракула, устойчивого к манипуляциям; нет проверки учета; нет вестинга по наградам.
Атакующий: 0x3a82...d2da
Пострадавшая пара: 0xaab1...8803 (USDT/$FOX)
Уязвимые контракты: FoxLpBondsPool (0x58e2...655a) | Treasury (0x8761...04d)
Еще один день — еще один эксплойт AMM. Если в вашем протоколе расчет ценности делается по спотовой цене в середине транзакции, вы становитесь ликвидностью для выхода.