🚨 ПРЕДУПРЕЖДЕНИЕ ОБ ЭКСПЛОИТЕ: @spir8l_com выведен примерно ~10.7 $ETH
Причина? Классическая манипуляция оракулом.
SpiralHookV2.borrow() доверял спот-цене Uniswap V4 (poolManager.getSlot0()) без TWAP или проверок на адекватность. Злоумышленник раздул стоимость залога, занял под него, затем сбросил всё — в одном блоке.
В протоколе была защита noSameBlockSwap, но она была привязана к tx.origin. Злоумышленник просто создал 6 разных EOA и обошёл её так, будто её и не было.
EOA злоумышленника:
0x859E69A29244A10800A34eE66919426C02aFa2f0
Контракт атаки:
0x0c23c8bc3b7c565f3f9f4ac691a4dc4275086f86
Уязвимый контракт:
0x1725577dC9B1ee2D95dB49c2193226471594aacc
Если в вашем протоколе для чего-то критичного используется спот-цена, вы на расстоянии одного MEV-бота от выхода ликвидности.
Только TWAP. Без исключений.
Причина? Классическая манипуляция оракулом.
SpiralHookV2.borrow() доверял спот-цене Uniswap V4 (poolManager.getSlot0()) без TWAP или проверок на адекватность. Злоумышленник раздул стоимость залога, занял под него, затем сбросил всё — в одном блоке.
В протоколе была защита noSameBlockSwap, но она была привязана к tx.origin. Злоумышленник просто создал 6 разных EOA и обошёл её так, будто её и не было.
EOA злоумышленника:
0x859E69A29244A10800A34eE66919426C02aFa2f0
Контракт атаки:
0x0c23c8bc3b7c565f3f9f4ac691a4dc4275086f86
Уязвимый контракт:
0x1725577dC9B1ee2D95dB49c2193226471594aacc
Если в вашем протоколе для чего-то критичного используется спот-цена, вы на расстоянии одного MEV-бота от выхода ликвидности.
Только TWAP. Без исключений.