.@OnyxDAO подвергся атаке, в результате которой был потерян почти 4 млн долларов. Основной причиной стал непроверенный пользовательский ввод во время процесса ликвидации. В частности, ключевые параметры функции liquidateWithSingleRepay в контракте NFTLiquidation контролировались злоумышленником, что позволяло манипулировать переменной extraRepayAmount через параметр repayAmount. Воспользовавшись этим, злоумышленник смог ликвидировать все обеспечение всего одним токеном.
Ключевые шаги атаки можно обобщить следующим образом:
1. Сначала злоумышленник внес депозит oETH и занял различные активы, чтобы достичь порога ликвидации. Одновременно они создали новый контракт, который посредством атаки пожертвования и потери точности (присущей форку Compound V2) снизил обменный курс oETH, сделав позицию злоумышленника подлежащей ликвидации.
2. Затем злоумышленник выполнил ликвидацию. Из-за недостаточной проверки параметров злоумышленник манипулировал переменной extraRepayAmount, которая была добавлена к расчету того, сколько токенов необходимо ликвидировать. Это позволило злоумышленнику получить больше oETH через ликвидацию, что привело к прибыли.
Атака Tx: