Протокол Revest Finance - REKT



~$2M украдено у Revest Finance.

Финансовая платформа по торговле NFT, которая "предлагает мгновенную ликвидность для заблокированных активов" стала жертвой атаки повторного входа.

Быстрая реакция команды Revest помогла им избежать потери еще большего количества фондов. Однако, они все же попали в наш рейтинг (#67).

Как это произошло?

Команда Revest узнала об “эксплоите в 2:24 UTC от команды разработчиков из BLOCKS DAO”.

Помимо BLOCKS DAO, существенные потери понесли EcoFi и RENA Finance.

Остановив трансферы токенов RVST, команда предотвратила попытку хакера (последовавшую через 70 секунд) слить пул RVST-ETH на Uniswap, избежав дополнительные потери в размере $1.15M.

Слив токенов хакером сильно сказался на цене BLOCKS (сначала падение на >95%, сейчас она ниже на ~80%) и ECO (падение на ~98%), однако токены RENA остаются нетронутыми на адресе хакера.

Источник: @BlockSecTeam

Причиной атаки стала уязвимость повторного входа в контракте чеканки ERC1155 (пример транзакции: RENA)

В функции mintAddressLock, которая была использована для создания новых Smart Vaults (умных хранилищ), содержатся два критических параметра: quantities и depositAmount.

Хранилище Revest Vault вызывает функцию mint функции FNFTHandler, чтобы отчеканить количество ERC1155 со следующим fnftId для получателя(ей), которые позже могут быть сожжены для получения доли заблокированных токенов. fnftId инкрементируется на 1 каждый раз, когда функция выполняется.

Дополнительные фонды можно депонировать в FNFT, используя функцию depositAdditionalToFNFT, депозиты должны соблюдать те же пропорции, что определяются функцией quantities, а именно: quantity==FNFTHandler.getSupply(fnftId).

Если вышеуказанное утверждение не выполняется, то доля пользователя будет извлечена из позиции и переведена в новую FNFT с балансом, определяемым depositAmount существующей позиции плюс вновь депонированная сумма.

Учитывая, что используется depositAmount существующей позиции, но fnftId (информированный через fnftsCreated) не обновляется до конца процедуры чеканки, повторный вход в этот момент позволяет добавить дополнительные средства к существующей позиции.

Пошаговый ход атаки:

1: Хакер использует функцию mintAddressLock, чтобы открыть новую позицию с fnftId=1027, depositAmount=0, quantities=[2], asset=Rena, и recipients=[вредоносный контракт]. Так как depositAmount X quantities[0] = 0 X 2 = 0, то хакер переводит нулевое количество Rena.

2: Хакер использует функцию mintAddressLock снова, чтобы открыть новую позицию с fnftId=1028, depositAmount=0, quantities=360,000, asset=Rena, и recipients=[вредоносный контракт]. Хакер снова переводит ноль Rena и получает 360,000 токенов (с fnftId=1028). Нужно отметить, что эти 1028 токенов сейчас не имеют никакой ценности.

3: В конце второго шага, в момент исполнения функции mint в FNFTHandler, хакер повторно вводит контракт Revest через интерфейс onERC1155Received. Функция depositAdditionalToFNFT используется со значениями amount = 1e18, quantities=1, fnftId=1027, которые обычно открывали бы позицию fnftId=1029 (новую). Тем не менее, из-за задержки в обновлении позиции fnftId, позиция 1028 переписывается с использованием указанных выше данных, приписывая ценность 1028 токенам, которыми владеет хакер.

4: Хакер использует функцию withdrawFNFT, чтобы вывести 360,000 X 1e18 токенов Rena, депонировав лишь 1 количество X 1e18 токенов Rena в шаге 3.

Потери токенов (примерно $2M в общей сложности), согласно официальному пост-мортему:

350k RENA (~$125k, все еще находятся на адресе хакера)

715M BLOCKS (~$1.7M)

7.7M ECO (~$100k)

Меньшие количества ($10-$12K) токенов ConstitutionDAO и LUKSO также были украдены.

После обмена большей части токенов на ETH, хакер вложил фонды в Tornado Cash.

Уязвимость в системе безопасности никогда не бывает хорошей приметой для DeFi-протокола, особенно когда его продукт является надежным хранилищем, которому можно доверять токены других проектов.

"Одного аудита никогда не бывает достаточно", сказали в Revest, поскольку они обнаружили, что при проверке безопасности не была обнаружена уязвимость повторного входа в ходе аудита проекта (solidity.finance).

Быстрая реакция команды и тщательный пост-мортем - это хорошие признаки, и хотя Revest заявили, что "мы не владеем фондами, необходимыми для значимого финансового вознаграждения", отчет пост-мортем подчеркивает желание делать вещи хорошо в будущем.

Пока что еще непонятно, как это произойдет.


Поделиться

REKT представляет собой общественную площадку для анонимных авторов. Мы не несём ответственность за выражаемые точки зрения или контент на этом веб-сайте.

Пожертвование (ETH / ERC20): 0x3C5c2F4bCeC51a36494682f91Dbc6cA7c63B514C

Дисклеймер:

REKT не несет никакой ответственности за любое содержание, размещенное на нашем Веб-сайте или имеющее какое-либо отношение к оказываемым нами Услугам, независимо от того, было ли оно опубликовано или создано Анонимным Автором нашего Веб-сайта или REKT. Не смотря на то, что мы устанавливаем правила поведения и нормы публикаций для Анонимных Авторов, мы не контролируем и не несем ответственность за содержание публикаций Анонимных Авторов, а также за то, чем делятся и что передают Авторы с помощью нашего Сайта и наших Сервисов, и не несем ответственность за любое оскорбительное, неуместное, непристойное, незаконное или спорное содержание, с которым вы можете столкнуться на нашем Веб-сайте и на наших Сервисах. REKT не несет ответственность за поведение, будь то онлайн или офлайн, любого пользователя нашего Веб-сайта или наших Сервисов.