Добро пожаловать в "Уязвимости Шерлока"! Каждую неделю мы будем выделять значительную уязвимость, которую наши исследователи обнаружили во время аудита Шерлока. На этой неделе мы имеем дело с чрезмерным выводом средств из-за неправильной конфигурации. Она была обнаружена @bin2chen, @TheCHADuke, iglyx, @tapired, @xiaoming9090 и @0xleastwood на конкурсе @NotionalFinance V3.
Если текущий баланс составляет 999,900 USDC, а сумма вывода составляет 1,000,000 USDC, то на счете недостаточно средств, и необходимо вывести дополнительные средства с денежного рынка (например, Compound).
Поскольку контракт уже имеет 999,900 USDC, необходимо вывести только дополнительные 100 USDC из денежного рынка, чтобы выполнить запрос на вывод 1,000,000 USDC.
Однако, вместо того чтобы вывести 100 USDC с денежного рынка, Notional выводит 1,000,000 USDC с рынка в соответствии с функцией oracle.getRedemptionCalldata(withdrawAmountExternal). В результате из денежного рынка выводится избыточная сумма в 999,900 USDC.
Каков эффект? Это привело к чрезмерному количеству активов, находящихся в Notional и не приносящих никаких доходов или процентов на денежном рынке, что привело к значительной потере доходности для пользователей, так как они получали более низкую процентную ставку, чем ожидали, и несли упущенные возможности.
Злоумышленники могут потенциально использовать это, чтобы вывести средства, которые Notional инвестировал в денежный рынок, что приведет к огорчению и колоссальным потерям доходов/процентов для протокола.
Исправление: По сути, до исправления код говорил оракулу: "Подготовьте шаги для вывода всего, что пользователь хочет из денежного рынка." Когда он должен был сказать: "Только заберите то, чего нам не хватает из денежного рынка."
После исправления, в приведенном ранее примере, 999,900 USDC, уже находящихся в контракте, остаются нетронутыми и продолжают приносить доход, улучшая эффективность и сохраняя доходы для всех пользователей.
Эта уязвимость возникла из-за тонкой логической ошибки в том, как рассчитывались и передавались суммы вывода. Игнорируя существующий баланс контракта, система ненужно изымала избыточные средства с денежного рынка, что приводило к неэффективности капитала и потере доходности. Мы гордимся тем, что помогли обеспечить безопасность Notional благодаря этому открытию. Когда безопасность абсолютно необходима, Sherlock — правильный выбор.
Показать оригинал
2,81 тыс.
35
Содержание этой страницы предоставляется третьими сторонами. OKX не является автором цитируемых статей и не имеет на них авторских прав, если не указано иное. Материалы предоставляются исключительно в информационных целях и не отражают мнения OKX. Материалы не являются инвестиционным советом и призывом к покупке или продаже цифровых активов. Раздел использует ИИ для создания обзоров и кратких содержаний предоставленных материалов. Обратите внимание, что информация, сгенерированная ИИ, может быть неточной и непоследовательной. Для получения полной информации изучите соответствующую оригинальную статью. OKX не несет ответственности за материалы, содержащиеся на сторонних сайтах. Цифровые активы, в том числе стейблкоины и NFT, подвержены высокому риску, а их стоимость может сильно колебаться. Перед торговлей и покупкой цифровых активов оцените ваше финансовое состояние и принимайте только взвешенные решения.