Sherlock AI сообщил о критической уязвимости в протоколе @40acresFinance. Команда 40acres щедро разрешила нам поделиться деталями публично, чтобы другие могли извлечь уроки из этой находки. Вот как работала уязвимость: Во-первых, veNFT — это особый тип токенов ERC721, которые хранятся под залог и зарабатывают еженедельные вознаграждения. 40acres предоставляет держателям veNFT мгновенный доступ к займам на основе будущих доходов их veNFT. Каждый veNFT заемщика находится внутри личного PortfolioAccount, который направляет функциональность через модульные "фасеты" с использованием паттерна алмаза. Эксплойт позволяет злоумышленнику вернуть свой залог (veNFT) из своего PortfolioAccount без погашения займа. Посмотрите на функцию aerodromeVote() ниже. У 40acres есть очень классная функция, которая позволяет заемщикам голосовать с помощью их veNFT, удерживаемых в качестве залога в 40acres. У функции есть следующая проблема: адрес loanContract не проверяется, что позволяет злонамеренному пользователю указать произвольный контракт. Этот контракт может быть одобрен для управления veNFT в PortfolioAccount, что позволяет его передать во время вызова vote() в злонамеренном loanContract. Шаги атаки 1) Злоумышленник разворачивает злонамеренный контракт, который реализует вызов transferFrom/safeTransferFrom для передачи одобренного veNFT. 2) Злоумышленник вызывает portfolioAccount.aerodromeVote(maliciousContract, tokenId). Портфельный fallback делегирует вызов фасету, который не имеет проверки входных данных и вызывает и передает veNFT обратно злоумышленнику, даже если заем не был погашен. Примечание: Повторение ошибки приводит к истощению кредитного пула - сделать это один раз - это просто взять заем и украсть свой veNFT обратно. Влияние Неподкрепленные займы по всей системе. Любой заемщик может вернуть свой собственный залог в середине займа, что приводит к полной неплатежеспособности кредитного пула. Благодарности Спасибо @defsec_, @vinica_boy и @onthehunt11_ за помощь с этой статьей. Важно знать: Команда 40acres обнаружила ошибку и применила исправление до запуска. Обнаружено Sherlock AI Вы можете увидеть оригинальную проблему, сгенерированную Sherlock AI, в следующем твите. Запуск занял 3 часа 59 минут от начала до конца. Sherlock AI приносит безопасность в процесс разработки, сканируя коммиты и пути вызовов на ранних этапах, быстро выявляя высокоэффективные недостатки и предоставляя аудиторам более четкое представление о сложных системах. На практике это означает, что такие проблемы, как эта, могут быть выявлены и решены задолго до аудитов, вознаграждений или развертывания. Попробуйте Sherlock AI для вашего протокола сегодня.
Исходные проблемы, сгенерированные Sherlock AI: Исходные проблемы, сгенерированные Sherlock AI: Попробуйте Sherlock AI для вашей команды сегодня:
59,59K