Back to Blog

~$36M Потеряно: Summer.fi, Bonzo Lend и Другие | BlockSec Weekly

July 15, 2026
9 min read
Key Insights

За прошедшую неделю (2026/07/06 - 2026/07/12) было выявлено 3 значимых инцидента безопасности, совокупный ущерб от которых составил приблизительно $36.29M.

Дата Инцидент Тип Оценочный ущерб
2026/07/06 Summer.fi Неправильная конфигурация ~$6.04M
2026/07/06 BonkDAO Ненадлежащее управление ~$21.2M
2026/07/11 Bonzo Lend Ненадлежащая проверка подписи ~$9.05M
  • Summer.fi: Выбран, поскольку демонстрирует, как в многоуровневых протоколах хранилищ не полностью выведенный из работы нижестоящий компонент может незаметно искажать цены акций на верхнем уровне, подчёркивая критическую важность завершения вывода из эксплуатации до того, как повреждённые позиции становятся уязвимыми.
  • Bonzo Lend: Выбран, поскольку демонстрирует, как тонкий дефект в верификации BLS на уровне оракула способен полностью обойти защиту подписи, что приводит к подделке корней цен и системным рискам для протоколов, зависящих от уязвимого верификатора.

Best Security Auditor for Web3

Validate design, code, and business logic before launch

Главное событие недели: Summer.fi

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

6 июля 2026 года хранилище FleetCommander протокола Summer.fi в сети Ethereum было взломано приблизительно на $6.04M [1][2]. Первопричина заключалась в том, что FleetCommander платформы Summer.fi продолжал учитывать стратегический компонент (называемый Ark), у которого был обнулён лимит депозита для вывода из работы, но который ещё не был исключён из активного набора при вычислении totalAssets(). Злоумышленник накопил большое количество устаревших переоценённых токенов vgUSDC, которые Ark по-прежнему оценивал близко к номиналу, затем напрямую перевёл их в Ark, чтобы завысить цену акций FleetCommander, и погасил их по завышенной цене.

Контекст

Summer.fi — это агрегатор доходности DeFi, построенный на архитектуре «хранилище хранилищ». Пользователи вносят активы в родительское хранилище ERC-4626 под названием FleetCommander, которое направляет средства через набор адаптеров стратегий, называемых Arks, в различные базовые протоколы кредитования и генерации доходности. Суммарные активы FleetCommander агрегируются из самостоятельно декларируемых значений каждого Ark, и пользователи могут погашать свои доли в любое время на основе этой агрегированной оценки.

Одним из базовых источников доходности является Morpho. FleetCommander через Ark вносит средства в хранилище Morpho и оценивает себя по имеющимся в нём долям. Когда пользователь погашает доли FleetCommander, если буфера наличных средств родительского хранилища недостаточно, средства извлекаются по стеку вверх из нижележащих хранилищ:

Пользователь погашает доли FleetCommander
   | (1) Сжигаются доли пользователя
   v
FleetCommander
   | (2) Сначала выплата из буфера; затем извлечение из Arks
   v
Ark
   | (3) Для получения наличных погашает собственные доли в базовом хранилище
   v
Хранилище Morpho
     (4) Для выплаты снимает средства с базовых рынков

Каждый Ark вычисляет свой totalAssets(), запрашивая собственный баланс токенов в базовом хранилище и конвертируя эти доли в активы. Поскольку эти доли являются стандартными токенами ERC-20, любой может напрямую перевести дополнительные доли в Ark, минуя процесс депозита FleetCommander.

Анализ уязвимости

Затронутыми FleetCommander являются хранилище LowerRisk USDC (0x98C4...cF17) и хранилище HigherRisk USDC (0xE9cD...cB06). Скомпрометированный Silo Varlamore Ark находится по адресу 0x61d7...76c2.

Два условия создали почву для эксплуатации:

  1. Устаревший переоценённый актив. После краха Stream Finance в ноябре 2025 года [3] и падения стоимости его доходного токена xUSD более чем на 75% хранилище Silo «Varlamore USDC Growth», державшее позиции, обеспеченные xUSD, стало практически невозвратным. Однако бухгалтерский учёт хранилища в блокчейне так и не отразил этот убыток: токены vgUSDC продолжали сообщать стоимость, близкую к номиналу, через convertToAssets(), даже когда базовый USDC оставался заморожен.

  2. Частично удалённый Ark. Ark, удерживавший эту обесцененную экспозицию, выводился из работы с лимитом депозита, установленным в 0. Однако обнуление лимита лишь блокирует новые депозиты через FleetCommander. Оно не удаляет Ark из расчёта totalAssets().

Ark вычисляет свой totalAssets(), вызывая vault.balanceOf(address(this)), а затем vault.convertToAssets(shares). Поскольку эти доли являются передаваемыми токенами ERC-20, любой может напрямую перевести дополнительные устаревшие переоценённые токены vgUSDC в Ark, завысив его totalAssets() без создания новых долей и без добавления реальной ликвидности для вывода. Это завышение распространяется вверх до цены акций FleetCommander.

Анализ атаки

Следующий анализ основан на транзакции 0x0db528...43da12.

  • Шаг 1: На протяжении предшествующих трёх месяцев злоумышленник накопил приблизительно 19.08 млрд vgUSDC через несколько кошельков, а незадолго до эксплойта консолидировал их в атакующий контракт.

  • Шаг 2: Злоумышленник взял флеш-кредит на 1 000 000 USDT из Morpho Blue, а затем вложил второй флеш-кредит на 65 419 171 USDC для финансирования атаки.

  • Шаг 3: Злоумышленник вызвал forceDeallocate() на нескольких хранилищах Morpho V2, возвратив 4 318 535 USDC с рынков Morpho Blue обратно в незадействованные балансы хранилищ. Это обеспечило достаточный объём ликвидных средств для выплаты завышенного погашения на более позднем этапе.

  • Шаг 4: Злоумышленник обменял 20 000 USDT приблизительно на 68 421 xUSD на Uniswap V4, а затем обменял этот xUSD приблизительно на 476.27 млн vgUSDC на Balancer V3. Это позволило накопить дополнительные устаревшие токены при минимальных реальных затратах.

  • Шаг 5: Злоумышленник внёс 64 828 534 USDC в FleetCommander LVUSDC и получил 60 787 156 долей.

  • Шаг 6: Злоумышленник напрямую перевёл приблизительно 19.55 млрд долей vgUSDC в Ark vgUSDC. Поскольку totalAssets() Ark учитывает все удерживаемые доли вне зависимости от способа их поступления, это завысило декларируемую стоимость Ark и соответственно завысило totalAssets() FleetCommander.

  • Шаг 7: Злоумышленник погасил 60 766 209 долей FleetCommander на 70 959 584 USDC, получив прибыль от разницы между завышенной ценой акций и первоначальным депозитом.
  • Шаг 8: В рамках той же атомарной транзакции злоумышленник применил аналогичное завышение к FleetCommander HigherRisk USDC. В сегменте HigherRisk использовались доли Term, внесённые в Ark Term с повышенным риском, а не vgUSDC, однако базовый механизм был тем же: завысить totalAssets() через пожертвование, затем погасить по завышенной цене. Совокупная прибыль по обоим хранилищам составила приблизительно $6.04M.

Заключение

Это была атака на завышение цены акций, вызванная операционным сбоем, а не программной ошибкой. Ark Silo, обесцененный в результате краха Stream Finance, по-прежнему учитывался в totalAssets() FleetCommander в процессе вывода из работы [2]. Злоумышленник пожертвовал дёшево накопленными, но устаревшими и переоценёнными токенами vgUSDC в этот Ark, завысил цену акций и погасил больше, чем внёс, за счёт других вкладчиков.

Обнуление лимита депозита не выводит Ark из работы. В многоуровневых системах хранилищ totalAssets() должен исключать выведенные из работы позиции, а удерживаемые активы должны оцениваться по реализуемой стоимости, а не по устаревшим котировкам в блокчейне. Любой выводимый из работы компонент должен быть полностью исключён из агрегированной оценки до того, как он сможет служить вектором завышения.

Ссылки

  • [1] Оповещение Phalcon в X
  • [2] Резюме сообщественного звонка Summer.fi
  • [3] Stream Finance понёс убытки в размере $93 млн (CoinDesk)

Get Started with Phalcon Explorer

Dive into Transactions to Act Wisely

Try now for free

Другие инциденты этой недели

Bonzo Lend

11 июля 2026 года протокол кредитования Bonzo Lend в сети Hedera понёс убытки в размере приблизительно $9.05M [1] после того, как злоумышленник отправил поддельное обновление оракула в Supra — сторонний провайдер ценовых данных протокола — для ценового потока SAUCE. Верификатор оракула принял доказательство с нулевой подписью и записал в блокчейн завышенную цену SAUCE/WHBAR. Bonzo Lend затем считал скомпрометированный поток и позволил злоумышленнику занять значительно больше активов, чем стоило внесённое залоговое обеспечение SAUCE.

Контекст

Bonzo Lend — это протокол кредитования в сети Hedera. Его рыночный учёт зависит от внешних ценовых потоков, включая Supra — сторонний оракульный провайдер — для экосистемных активов, таких как SAUCE. Bonzo Lend самостоятельно не аутентифицирует каждую подпись комитета оракула; он считывает последнее значение, уже сохранённое в потоке оракула в блокчейне, и использует его при расчёте стоимости залога и кредитной ёмкости.

Путь обновления pull-оракула Supra проверяет отправленный корень перед записью данных потока в хранилище. В соответствующем пути кода verifyOracleProofV2() перебирает отправленные данные оракула, вызывает requireRootVerified() для корней, ещё не кэшированных в merkleSet, проверяет листья Меркла, а затем записывает более новые раунды потока через packData().

if (merkleSet.contains(oracle.data[i].root)) {
    continue;
}
requireRootVerified(oracle.data[i].root, oracle.data[i].sigs, oracle.data[i].committee_id);
if (!merkleSet.set(oracle.data[i].root)) {
    revert RootIsZero();
}

Безопасность обновления потока зависит от того, отклоняет ли requireRootVerified() корни, не подписанные в действительности настроенным комитетом оракула.

Анализ уязвимости

Уязвимый контракт — верификатор оракула Supra (0.0.4323006).

Первопричиной стал недопустимый путь верификации BLS в вышестоящем верификаторе оракула Supra. Транзакция эксплойта отправила обновление цены для пары 425 (SAUCE/WHBAR) с ID комитета 2 и нулевым значением подписи [0, 0].

При обычной проверке BLS верификатор должен убедиться, что подпись и открытый ключ ненулевые, лежат на кривой и находятся в правильной подгруппе, прежде чем вызывать прекомпилятор спаривания. Уязвимый верификатор построил проверку спаривания из нулевой точки подписи и нулевой точки открытого ключа комитета. Прекомпилятор спаривания Hedera вернул true, поскольку произведение спаривания для единичных точек математически корректно, а не потому что существовала реальная подпись комитета.

Верификатор обязан проверять корректность входных данных; прекомпилятор лишь проверяет уравнение спаривания. Пропустив отклонение нулевых точек перед спариванием, оракул принял поддельный корень и позволил манипулятивным ценовым данным попасть в хранилище.

function requireHashVerified_V2(
    bytes32 _message,
    uint256[2] calldata _signature,
    uint256 committee_id
) public view {
    bool callSuccess;
    bool checkSuccess;
    (checkSuccess, callSuccess) = BLS.verifySingle(
        _signature,
        committee_public_key[committee_id],
        BLS.hashToPoint(domain, abi.encode(_message)),
        blsPrecompileGasCost
    );
    if (!callSuccess) {
        revert BLSInvalidPublicKeyorSignaturePoints();
    }
    if (!checkSuccess) {
        revert BLSIncorrectInputMessaage();
    }
}

Анализ атаки

Следующий анализ основан на транзакции 0.0.995584-1783731093-686041919.

  • Шаг 1: Злоумышленник внёс 250 SAUCE в Bonzo Lend в качестве залога.

  • Шаг 2: Злоумышленник отправил вредоносное обновление оракула в контракт pull-оракула Supra. Обновление установило цену SAUCE на чрезвычайно завышенном уровне, используя описанное выше нулевое доказательство BLS-подписи.

  • Шаг 3: verifyOracleProofV2() принял отправленный корень после того, как requireRootVerified() вернул успешный результат. Функция верифицировала данные листа Меркла и вызвала packData() для более нового раунда потока, в результате чего манипулятивное значение SAUCE/WHBAR стало последним сохранённым значением оракула.

  • Шаг 4: Bonzo Lend считал последнюю цену SAUCE из оракула. Поскольку сохранённое значение потока уже было завышено, протокол рассчитал стоимость залога злоумышленника в 250 SAUCE как значительно превышающую его рыночную стоимость.

  • Шаг 5: Злоумышленник занял приблизительно 6.6M USDC и 34.5M WHBAR под завышенную стоимость залога. Аномальная цена оставалась активной до тех пор, пока последующее легитимное обновление оракула не восстановило нормальный диапазон цены SAUCE.

Заключение

Этот инцидент стал сбоем верификации оракула, а не ошибкой в учёте пула кредитования. Злоумышленнику не потребовалось манипулировать рынком SAUCE или обходить внутренние проверки залога Bonzo Lend. Поддельная цена была принята вышестоящим верификатором оракула Supra, записана в поток и потреблена Bonzo Lend через его обычный путь чтения цен.

Протоколы, использующие внешние потоки данных, наследуют допущения безопасности всего пути верификации оракула. Для обновлений оракула на основе BLS нулевые точки должны отклоняться до вызова прекомпилятора спаривания. Валидация входных данных на криптографическом уровне не является опциональной; математическая корректность уравнения спаривания не подразумевает подлинности базовой подписи.

Ссылки

  • [1] Отчёт об инциденте Bonzo Finance
  • Get Started with Phalcon Security

    Detect every threat, alert what matters, and block attacks.

    Try now for free
Sign up for the latest updates
~$800K потеряно: двойное списание в Hinkal | Еженедельник BlockSec
Security Insights

~$800K потеряно: двойное списание в Hinkal | Еженедельник BlockSec

Еженедельный отчёт охватывает 1 инцидент за 29 июня – 5 июля 2026 г.: ~$800K потерь в Ethereum. Протокол Hinkal был атакован через двойное списание из-за уязвимости в устаревшем формате нот, позволявшей извлекать несколько нуллификаторов из одного депозита.

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

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

Отчёт за июнь 2026: три крупнейших инцидента с общими потерями ~$22M. Honeypot атака опустошила MEV-бот на ~$15M. Уязвимости Aztec rollup привели к потере ~$4.35M. Ошибка Ed25519 в SecondFi раскрыла ключи 374 кошельков (~$2.4M).

~$4M потеряно: эксплойты Taiko и SecondFi | Еженедельник BlockSec
Security Insights

~$4M потеряно: эксплойты Taiko и SecondFi | Еженедельник BlockSec

Отчёт за 22–28 июня 2026: два инцидента, ~$4,1М потерь. Эксплойт Taiko: утечка ключа SGX + неполная политика аттестации → подделка L2-доказательств. SecondFi: уязвимость Ed25519 (нонс без секрета) → восстановление приватных ключей Cardano.