Атака на Oracle Bonzo Finance: патч существовал восемь дней, просто не на Hedera
В 00:39:53 UTC, 11 июля 2026, кто-то в Bonzo Lend внес 250 токенов SAUCE. Они стоили около трех долларов. Двенадцать минут спустя тот же кошелек отправил поддельное обновление цены. Через восемь секунд 6,63 миллиона USDC и 34,5 миллиона WHBAR покинули пул.
Итоговый ущерб: 9,05 миллиона долларов. Эта атака на Oracle не взломала ни один приватный ключ, ни один смарт-контракт Bonzo не был взломан, а сеть Hedera работала нормально все это время.
Худшая часть — не механизм. Патч для этой уязвимости существовал уже восемь дней и был установлен на 11 других сетях. На Hedera он не дошел.
Стоит понять, что произошло, даже если вы никогда не слышали о Hedera, потому что ошибка не экзотическая — сломалась проверка подписи, точка, через которую проходит большая часть инфраструктуры DeFi.
Что произошло за 62 минуты
Bonzo Finance — это кредитный протокол в сети Hedera, форк в стиле Aave. Одни вносят средства, другие занимают под залог. Чтобы протокол знал, сколько стоит залог, он должен получать цену извне — от сервиса Oracle. Bonzo использовал Supra pull-oracle. Именно этот шов и лопнул.
Хронология из официального отчета Bonzo об инциденте:
- 00:39:53 — атакующий вносит 250 SAUCE в качестве залога, стоимостью около трех долларов.
- 00:51:39 — отправляет манипулируемое обновление цены для SAUCE. Верификатор принимает его и записывает бессмысленную цену в блокчейн.
- 00:51:47 — занимает 6.634.528 USDC.
- 00:51:57 — занимает 34.518.389 WHBAR.
- ~01:11–01:36 — второй кошелек выводит остаток ликвидности, пока завышенная цена еще действует. Его владелец позже свяжется с Bonzo как «white-hat».
- 01:36 — легитимная публикация цены возвращает SAUCE к реальной стоимости.
- 01:41 — Bonzo Lend приостановлен.
SAUCE реально стоит около 1,38 цента. Поддельное обновление завысило его примерно на 12 порядков — примерно в триллион раз. Против залога в три доллара протокол спокойно выдал девять миллионов.
Последствие было мгновенным: TVL Bonzo упал на 77 процентов, с 11,7 миллиона долларов до менее трех миллионов за несколько часов. DeFi TVL всей сети Hedera упал примерно на 40 процентов — паттерн, который мы видели и в отчете за Q1: один протокол падает, доверие ко всей сети уходит вместе с ним.
Hedera Foundation публично подтвердила, что сеть не была скомпрометирована — консенсус, хэшграф и основные сервисы работали нормально, мейннет оставался операционным. Это различие повторяется почти в каждом крупном инциденте: упала не сеть, а протокол на ней, и через сторонний сервис.
Анатомия атаки на Oracle: как ноль прошел криптографическую проверку
Supra работает как pull-oracle: протокол запрашивает подписанную цену, а затем проверяет BLS-подпись комитета, который ее гарантирует. Если подпись действительна, цена принимается.
Атакующий в запросе указал committee ID 2 — комитет, который не был заполнен. Верификатор, вместо того чтобы отклонить запрос, вернул публичный ключ, состоящий из одних нулей. Атакующий приложил к нему нулевую подпись, [0,0].
Дальше математика сделала свое дело. Когда и подпись, и публичный ключ — нули, оба являются единичными элементами, поэтому произведение спаривания тривиально является единицей. Hedera pairing precompile, полностью корректно и согласно EIP-197, вернул true. Верификатор прочитал это true как «подпись действительна».
Для тех, кто не живет в криптографии: вы просите подтверждение из офиса, которого не существует. Вместо того чтобы сказать «такого офиса нет», клерк протягивает вам пустой лист. Вы ставите на пустой лист пустую печать. Автомат сравнивает пустое с пустым, заключает, что они идеально совпадают, и пропускает вас дальше.
Функция requireHashVerified_V2 никогда не проверяла, является ли вход вырожденным, прежде чем передать его на спаривание. Не хватало трех проверок: отклонение единичного элемента, проверка, что точка находится на кривой и в правильной подгруппе, и проверка, что у комитета вообще есть ключ. Supra в постмортеме была прямолинейна: сама проверка единичного элемента предотвратила бы атаку.
Патч дошел до 11 сетей, до Hedera — нет
Это часть, из-за которой инцидент — не просто технический анекдот.
Supra закрыла ту же уязвимость в период с 29 июня по 3 июля 2026 — прокси-обновлениями на 11 сетях. Base получил патч 29 июня, Polygon — 3 июля. Тот же паттерн SupraSValueFeedVerifier, то же исправление.
Развертывание остановилось на Polygon. Hedera и Fuse остались нетронутыми. Восемь дней спустя, 11 июля, кто-то использовал именно эту незапатченную инстанцию. Почему развертывание было остановлено до конца — не объяснено. Supra в первом отчете об инциденте даже не упомянула предыдущий фикс для 11 сетей; она описала его как «криптографический крайний случай». Верификатор на Hedera был пропатчен только после атаки.
Для пользователя урок более неприятен, чем при обычном zero-day: безопасность протокола, который вы используете, зависит не только от того, знает ли кто-то о баге, но и от того, была ли ваша сеть в списке приоритетов, когда патч развертывался.
Баг был виден два года
Уязвимый верификатор стоял незапатченным два года, полностью on-chain и видимый любому, кто бы его прочитал. Обнаружил его сам генеральный директор Supra Джошуа Тобкин после инцидента: «Live. Transparent. For two years straight» — через весь бычий рынок.
Его объяснение, почему баг нашли именно сейчас: хакерство с помощью ИИ. Тобкин описывает это как новый класс противников, который «читает каждую строку, каждую ветку, каждый крайний случай» и находит то, что ускользало от человеческих глаз два года.
Если он прав, изменился противник, а не код. Публичный контракт, который годами «не был атакован», никогда не был доказательством его безопасности — он был доказательством того, что его никто не читал достаточно внимательно. Это различие перестало быть академическим.
Где сейчас деньги
Средства не возвращены. Атакующий перевел около 5,25 миллиона долларов — 2.360 ETH и 15,58 WBTC — с Hedera через LayerZero и Stargate, по пути через Arbitrum и Base на Ethereum, и конвертировал WBTC в ETH. Мосты между сетями — излюбленный маршрут после кражи: это быстро, ликвидно и трудно остановить. Более поздние отчеты упоминают баланс около семи миллионов долларов в ETH на кошельке, связанном с атакующим.
След имеет симметрию: кошелек перед атакой был засеян 1 ETH из Tornado Cash, а добыча после моста направилась обратно в Tornado Cash. Маршрут отслеживали ончейн-исследователь Specter и QuillAudits, а PeckShield связал начальное финансирование.
Генеральный директор Supra публично предложил атакующему сделку: оставь 100.000 долларов, верни остальное, без уголовного преследования и с предложением работы. Если откажется — постоянная награда за его раскрытие, которая растет на 10 процентов в год, навсегда. Ответа не было.
Те миллион долларов со второго кошелька все еще висят. Владелец представился white-hat и пообещал возврат; Bonzo учитывает эту сумму как «координация возврата в процессе» и исключает ее из официальной цифры убытка. На момент последней проверки деньги не возвращены. Протокол все еще приостановлен.
Supra тем временем установила патч, который отклоняет единичные элементы, проверяет, что точки находятся на кривой и в правильной подгруппе, и отклоняет комитеты без ключа.
Что это значит, если вы держите деньги в DeFi
Эту атаку пользователь не мог предотвратить. Он мог снизить подверженность риску:
- Проверьте, сколько источников Oracle использует протокол. Один Oracle — это одна точка отказа. Протоколы, которые перекрестно используют несколько независимых источников или берут медиану, проходят такую атаку с меньшим ущербом.
- Ищите circuit breaker. Скачок цены на 12 порядков остановила бы любая проверка на здравый смысл. Если у протокола нет верхнего предела отклонения цены и нет паузы при аномалии, вопрос только в том, когда это произойдет.
- Спрашивайте, что покрывал аудит, а не есть ли он. Контракт был аудирован, но сервис, из которого он берет цену, часто не входит в область аудита. У Bonzo лопнул именно этот шов.
- Проверьте, отслеживает ли протокол патчи своих зависимостей. Здесь патч существовал восемь дней и был установлен на 11 других сетях. Вопрос «кто отслеживает обновления безопасности сервисов, от которых вы зависите» не был теоретическим — он стоил девять миллионов.
- Кредитование — это не сбережения. Депозит в кредитный протокол — это активная позиция с активным риском, как бы интерфейс ни напоминал банковское приложение. Не держите там то, что не можете позволить себе потерять, и не держите все в одном месте.
- Следите за ончейн-исследователями, а не только за официальными каналами. Независимые аналитики отслеживали поток средств в реальном времени. Если ваша ликвидность зависит от скорости реакции, официальный аккаунт протокола — слишком медленный источник.
Часто задаваемые вопросы
Что такое Oracle в DeFi? Сервис, который приносит смарт-контракту данные из внешнего мира, чаще всего цену токена. Контракт сам не может «посмотреть» на биржу, поэтому доверяет Oracle. Если Oracle принимает ложь, контракт принимает правильные решения на основе неверных данных.
Была ли взломана сеть Hedera? Нет. Hedera Foundation подтвердила, что консенсус, хэшграф и основные сервисы не были скомпрометированы, и мейннет оставался операционным. Упал протокол в сети, через сторонний сервис Oracle.
Сколько именно было украдено? 9,05 миллиона долларов основной суммы, согласно официальному отчету Bonzo об инциденте — 6.634.528 USDC и 34.518.389 WHBAR. Дополнительно около миллиона долларов вывел второй кошелек, владелец которого представился white-hat; эта сумма не включена в официальную цифру убытка.
Были ли возвращены средства? Нет. Около 5,25 миллиона было переведено на Ethereum и другие сети и прошло через Tornado Cash. Публичное предложение атакующему осталось без ответа. Белый хакерский миллион также не возвращен — Bonzo числит его как возврат в процессе координации.
Почему патч не был установлен на Hedera? Supra закрыла ту же уязвимость на 11 сетях в период с 29 июня по 3 июля 2026, но развертывание остановилось перед Hedera и Fuse. Причина остановки публично не объяснена. Верификатор на Hedera был пропатчен только после атаки.
Как узнать, уязвим ли протокол, который я использую, к той же атаке? Если он использует один Oracle без перекрестной проверки, не имеет верхнего предела отклонения цены и не имеет паузы при аномалии — он подвержен тому же классу атак, независимо от того, какой сервис Oracle он использует. Сам верификатор Supra пропатчен, но паттерн «проверка, которая считает вырожденный вход действительным» не привязан к одному провайдеру.
Источники
- Bonzo Finance — официальный отчет об инциденте: https://bonzo.finance/blog/bonzo-lend-incident-report-oracle-provider-exploit
- Supra Labs — постмортем верификатора Oracle: https://supra.com/news/security-incident-report-hedera-pull-oracle-verifier/
- Hedera — подтверждение, что мейннет не был скомпрометирован: https://x.com/hedera/status/2075986869569884353
- rekt.news — расследовательский синтез инцидента: https://rekt.news/bonzo-finance-rekt
- CryptoNews — хронология патчей на 11 сетях до Hedera: https://cryptonews.net/news/security/33154400/
- BlockSec — технический разбор: https://blocksec.com/blog/web3-security-summerfi-bonzo-lend-exploits
- The Block — отчет об инциденте: https://www.theblock.co/post/407960/hedera-lending-protocol-bonzo-lend-hit-for-9-million-after-supra-verifier-accepts-manipulated-price-update