VEE finance выпустила отчет о недавнем инциденте безопасности. В отчете они заявляют, что основной причиной является то, что «манипулирование ценой оракула Vee Finance и получение цены оракулом не были обработаны с учетом десятичных дробей, в результате чего ожидаемая проверка проскальзывания перед свопом не сработала».
«Основной причиной инцидента стало то, что в процессе создания ордера для торговли с кредитным плечом оракул использовал только цену пула Pangolin в качестве источника котировок, а цена в пуле колебалась более чем на 3%. Оракул обновил цену, что позволило злоумышленнику манипулировать ценой пула Pangolin. Манипулирование ценой оракула Vee Finance и получение цены оракулом не были обработаны с учетом десятичных дробей, в результате чего ожидаемая проверка проскальзывания перед свопом не сработала». — цитата из отчета, опубликованного VEE finance.
Однако после нашего тщательного расследования мы обнаружили, что это, возможно, НЕ так. Истинная причина заключается в том, что злоумышленник создает ФЕЙКОВЫЙ ctokenB и передает его в контракт. Поскольку ctokenB контролируется злоумышленником, он может вернуть произвольный базовый токен, который используется для расчета цены токена. Это и есть реальная первопричина атаки.
Весь процесс
Существует внешняя функция createOrderERC20ToERC20, которую может вызвать любой пользователь для создания свопа токенов, используя ctoken, полученный путем внесения обеспечения в контракт. У ctoken есть базовый токен, который представляет собой реальный токен.

В обычном случае при вызове createOrderERC20ToERC20 для торговли парой токенов с кредитным плечом dApp должен гарантировать, что торговля не повлечет никаких убытков (в противном случае dApp потеряет деньги). Это обеспечивается вызовом функции getAmountOutMin.

Допустим, мы вносим 0.95 ETH в dApp и получаем ctoken, который стоит 0.5 ETH (избыточное обеспечение). Затем мы можем использовать 3-кратное кредитное плечо, чтобы попросить dApp обменять 1.5 ETH на другой токен (скажем, tokenX) от имени пользователя. В этом случае, чтобы предотвратить убытки, dApp должен убедиться, что стоимость торгуемого tokenX не может быть ниже 0.95 * 1.5 ETH (в противном случае dApp рискует потерять деньги). Для расчета стоимости ETH и tokenX dApp использует внешний ценовой оракул.
Однако функция createOrderERC20ToERC20 не проверяет переданный ctokenB. Таким образом, злоумышленник может внедрить свой собственный контракт в качестве ctokenB и передать его в функцию createOrderERC20ToERC20. В результате этот фейковый ctokenB может возвращать базовый токен как LINK (0x5947bb275c521040051d82396192181b413227a3) при вызове в createOrderERC20ToERC20 и getAmountOutMin, но возвращать базовый токен как BTC при вызове в IPriceOracle(oracle).getUnderlyingPrice(createParams.ctokenB). Таким образом, он может обойти проверку isRightPrice, поскольку токен, используемый для расчета цены, — это BTC (а не LINK). Это можно подтвердить возвращаемым значением priceB — 0x15e1549d1216fe9fc032e7c00000 (443783124870000000000000000000000). Это цена BTC.
Заключение
Подводя итог, злоумышленник использует отсутствие проверки ctokenB. Поскольку ctokenB не является доверенным, базовый токен, возвращаемый им, также не может быть доверенным. Однако в этой атаке ценовой оракул скомпрометирован НЕ был.
Вывод
Обеспечение безопасности DeFi-проекта — непростая задача. Помимо аудита кода, мы считаем, что сообществу следует применять проактивный подход к мониторингу состояния проекта и блокировать атаку еще до того, как она произойдет.
О компании BlockSec
BlockSec — это передовая компания в области безопасности блокчейнов, основанная в 2021 году группой всемирно признанных экспертов по безопасности. Компания стремится к повышению безопасности и удобства использования для формирующегося мира Web3, чтобы способствовать его массовому внедрению. С этой целью BlockSec предоставляет услуги аудита безопасности смарт-контрактов и EVM-цепочек, платформу Phalcon для безопасной разработки и проактивного блокирования угроз, платформу MetaSleuth для отслеживания и расследования транзакций, а также расширение MetaSuites для эффективной работы разработчиков Web3 в криптомире.
На сегодняшний день компания обслужила более 300 уважаемых клиентов, таких как MetaMask, Uniswap Foundation, Compound, Forta и PancakeSwap, и привлекла десятки миллионов долларов США в двух раундах финансирования от выдающихся инвесторов, включая Matrix Partners, Vitalbridge Capital и Fenbushi Capital.
Официальный сайт: https://blocksec.com/
Официальный аккаунт в Twitter: https://twitter.com/BlockSecTeam



