| Параметр | Reentrancy | Flash Loan Exploit |
|---|---|---|
| Где уязвимость | В коде функции вывода | В логике расчёта цены или коллатерала |
| Нужен ли капитал | Минимальный, есть пыль | Огромный, берётся через флэш-займ |
| Длительность атаки | Одна транзакция, рекурсия | Одна транзакция, манипуляция оракулом |
| Защита | ReentrancyGuard, checks-effects-interactions | TWAP-оракулы, защита от мгновенных свопов |
| Знаменитый случай | The DAO 2016 — 60 млн | bZx, Harvest Finance, Cream Finance |
Reentrancy эксплуатирует порядок инструкций внутри одной функции, Flash Loan Exploit — связку нескольких смарт-контрактов через ценовой оракул. Reentrancy исправляется за 1 строку кода, Flash Loan Exploit — это уже архитектурная проблема.
Как работает атака на практике
- Атакующий разворачивает контракт-приёмник со зловредной функцией fallback
- Делает депозит 1 ETH в уязвимый контракт жертвы
- Вызывает функцию withdraw — жертва отправляет 1 ETH обратно
- При получении ETH срабатывает fallback атакующего, который снова зовёт withdraw
- Жертва ещё не обновила баланс — отправляет ещё 1 ETH; цикл повторяется, пока контракт не опустеет
Не клади средства в DeFi-протоколы без публичного аудита от Trail of Bits, OpenZeppelin, CertiK или ConsenSys Diligence. Reentrancy — простая в эксплуатации уязвимость, и форки старых протоколов часто наследуют её. Аудит — обязательный фильтр.
Защиты от Reentrancy
Разработчики используют проверенные паттерны.
- Checks-Effects-Interactions — сначала проверки, потом изменение состояния, потом внешний вызов
- ReentrancyGuard от OpenZeppelin — модификатор nonReentrant блокирует повторный вход
- Mutex — установка флага «я внутри функции» до операций и сброс после
- Pull over Push — пользователь сам забирает средства, контракт не отправляет автоматически
- Slither, MythX — статический анализ обнаруживает Reentrancy за минуты
- Аудит от Trail of Bits, OpenZeppelin, CertiK — ручной обзор кода
Перед депозитом в новый DeFi-протокол открой Etherscan, найди верифицированный исходник контракта и поищи строку «nonReentrant» или «ReentrancyGuard». Если её нет — задавай вопросы в Discord проекта. Команда без аудита и без модификаторов nonReentrant — красный флаг.
Знаменитые случаи Reentrancy
- The DAO (2016) — украдено 3,6 млн ETH (60 млн долларов), привело к форку Ethereum на ETH/ETC
- Lendf.Me (2020) — потеряно 25 млн долларов через ERC-777 reentrancy
- Cream Finance (2021) — 130 млн долларов через cross-function reentrancy
- Siren Protocol (2021) — потеряно 3,5 млн долларов
- Burgerswap (2021) — украдено 7,2 млн долларов
- Fei Protocol (2022) — потеряно 80 млн долларов через read-only reentrancy
Что нужно знать новичку
- Reentrancy — самая известная уязвимость в истории смарт-контрактов
- Защита есть, она простая — но многие новые форки забывают её внедрять
- Перед использованием DeFi-протокола проверяй наличие аудита и репутацию команды
- Топовые DEX (Uniswap, Aave, Compound) с аудитами Trail of Bits и OpenZeppelin — безопасны
- Малые форки и yield-фермы с APY 500%+ часто содержат уязвимости — большая часть таких rug pull начинается с Reentrancy
- Никогда не давай неограниченный approve неизвестному контракту