Back to Blog

Истинная первопричина инцидента безопасности Vee Finance

Code Auditing
September 22, 2021
3 min read

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

Sign up for the latest updates
~$5.98M Потеряно: Aztec, Raydium и другие | Еженедельник BlockSec
Security Insights

~$5.98M Потеряно: Aztec, Raydium и другие | Еженедельник BlockSec

Еженедельный отчёт о безопасности блокчейна (8–15 июня 2026 г.): 4 инцидента в Ethereum и Solana, общие потери ~$5,98 млн. Aztec Connect: отсутствие валидации входных данных привело к рассинхронизации rollup и L1. Raydium: уязвимость в AMM v3 позволила дренировать 4 пула.

Анализ уязвимости Zcash Orchard | Еженедельник BlockSec
Security Insights

Анализ уязвимости Zcash Orchard | Еженедельник BlockSec

Критическая уязвимость в цепи Orchard Zcash: отсутствие ограничения равенства в гаджете ECC halo2 позволяло незаметно подделывать ZEC через двойное расходование. Уязвимость существовала 4+ лет, обнаружена ИИ-аудитом (Anthropic Opus 4.8, исследователь Тейлор Хорнби), устранена экстренным обновлением NU6.2.

Информационный бюллетень — май 2026 г.
Security Insights

Информационный бюллетень — май 2026 г.

В мае 2026 года в DeFi произошло 3 взлома: Echo Protocol ($76,7 млн, компрометация ключа), StablR ($12,8 млн, брешь в multisig) и Verus-Ethereum Bridge ($11,7 млн, ошибка проверки типов). Общий ущерб — около $101,2 млн.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit