изучено: reentrancy на практике, flash loan attacks
🃏 выжимка изученного:
💎reentrancy
reentrancy это уязвимость, когда контракт во время выполнения функции вызывается повторно до завершения логики
это обычно происходит при external call. Контракт отправляет средства другому контракту, и тот может обратно вызвать функцию до того как обновилось состояние
пример: пользователь вызывает withdraw. Контракт сначала отправляет деньги, а потом обновляет баланс. Злоумышленник делает контракт который при получении средств снова вызывает withdraw. В итоге деньги выводятся несколько раз
правильный подход это сначала обновлять состояние, а потом делать external call. Это называют checks effects interactions
главная идея что неправильный порядок действий может привести к повторному вызову и потере средств
💎flash loan attacks
flash loan attacks это атаки, где используется flash loan для манипуляции системой.➔ код уже на GitHub
атакующий берёт большую сумму без залога, временно влияет на цену или состояние протокола и зарабатывает на этом
пример: берётся большой займ, через него сдвигается цена в AMM, затем вызывается функция в протоколе который использует эту цену, и система считает неправильные данные. После этого займ возвращается, а прибыль остаётся
такие атаки часто происходят если протокол использует слабые оракулы или не учитывает резкие изменения цены
главная идея что flash loans сами по себе не проблема, но в связке с ошибками в логике протокола становятся инструментом для атак