За прошедшую неделю (2026/07/13 - 2026/07/19) зафиксированы следующие 2 notable инцидента безопасности с совокупными потерями около $1,35 млн в сетях Ethereum и Solana.
| Дата | Инцидент | Тип | Ориентировочные потери |
|---|---|---|---|
| 2026/07/15 | BarnBridge | Ненадлежащее управление | ~$776K |
| 2026/07/16 | DeFiTuna | Некорректная проверка здоровья | ~$570K |
- DeFiTuna: Проверка здоровья позиции принимала нулевое значение актива как здоровое при ненулевом долге; злоумышленник использовал контролируемую маршрутизацию свопов и отдельный пул с низкой ликвидностью, чтобы активировать этот дефект и создать позицию с безнадёжным долгом.
- BarnBridge: Устаревшая система управления была использована для изменения критической конфигурации протокола и вывода одобренных пользователями средств.
Лучший аудитор безопасности для Web3
Проверьте дизайн, код и бизнес-логику перед запуском
Главное за неделю: DeFiTuna
Первопричиной стала некорректная ветка обработки нулевого значения в проверке здоровья позиции: позиция с нулевой стоимостью активов и непогашенным долгом ~$570K была принята как здоровая. Злоумышленник активировал этот дефект, направив своп через отдельный пул с низкой ликвидностью, однако именно проверка здоровья должна была предотвратить возникновение безнадёжного долга.
16 июля 2026 года DeFiTuna, протокол кредитования на Solana с поддержкой плечевых спотовых позиций, был атакован приблизительно на $570K в USDC [1]. Первопричиной стала некорректная ветка обработки нулевого значения в проверке здоровья позиции, которая принимала позицию как здоровую даже при нулевой стоимости активов и ненулевом долге. Злоумышленник открыл плечевую позицию с нулевым залогом, занял USDC из хранилища протокола и направил своп через подконтрольный ему пул с низкой ликвидностью, в результате чего позиция получила ничтожное количество целевого токена. Усечение точности округлило стоимость позиции до нуля, и проверка здоровья приняла позицию как здоровую, создав безнадёжный долг приблизительно на $570K.
Предыстория
DeFiTuna — протокол кредитования на Solana с поддержкой маржинальной торговли. Пользователь может открыть спотовую позицию, предоставив один токен в качестве залога, заняв средства из хранилища протокола и обменяв заёмные средства на целевой токен. Полученная позиция затем проверяется на соответствие долгу для определения её здоровья.
На спотовом рынке DeFiTuna два токена пула обозначаются как токен A и токен B. На атакованном рынке токеном A был TUNA, а токеном B — USDC.
USDCбыл токеном залога (collateral_token). Пользователь вноситUSDCв качестве маржи, занимает дополнительныйUSDCиз хранилища DeFiTuna, после чего заёмныйUSDCобменивается наTUNA.TUNAбыл токеном позиции (position_token) — активом, который позиция удерживает после свопа. Итоговый эффект — плечевая длинная позиция поTUNA, финансируемая долгом вUSDC.- Счета хранилища содержат ликвидность кредиторов и являются источником заёмных средств.
- Пул AMM обеспечивает рыночную ликвидность и ценовой контекст для пары
TUNA/USDC.
DeFiTuna маршрутизирует свопы позиций через Jupiter — агрегатор свопов на Solana. Путь свопа передаётся в инструкцию DeFiTuna в виде данных маршрута Jupiter и аккаунтов маршрута. Поскольку эти аккаунты предоставляет вызывающая сторона, она контролирует, через какой пул выполняется своп. Перед выполнением свопа DeFiTuna проводит проверку цены, сравнивая цену обычного рыночного пула с ценой оракула.
Анализ уязвимости
Уязвимая программа — DeFiTuna (tuna4u...nogD).
Первопричиной стала некорректная ветка обработки нулевого значения в проверке здоровья позиции. После свопа DeFiTuna оценивал позицию, переводя удерживаемый TUNA в единицах USDC. Если баланс TUNA был достаточно мал для округления до нуля, поле total принимало значение 0. Логика проверки здоровья трактовала total == 0 как здоровое состояние, не требуя при этом debt == 0.


Анализ атаки
Два свойства дизайна дали злоумышленнику контроль над маршрутизацией заёмных средств. Во-первых, DeFiTuna принимал предоставленные вызывающей стороной данные Jupiter RouteV2, не вычисляя самостоятельно минимально допустимый вывод TUNA на основе цены оракула и суммы займа. Во-вторых, проверка оракула перед свопом валидировала только обычный рыночный пул DeFiTuna, а не тот пул, который фактически использовал маршрут Jupiter.

Примечание: Анализ инцидента, одобренный командой проекта [1], описывает созданный злоумышленником пул как инициализированный вблизи легитимной цены оракула. Данные в блокчейне свидетельствуют о том, что пул был инициализирован по экстремальной цене; проверка перед свопом была пройдена, поскольку она валидировала отдельный обычный рыночный пул, а не пул под контролем злоумышленника.
Следующий анализ основан на транзакции 4x33Dq...EXj1. Было выполнено несколько атакующих транзакций; данная иллюстрирует основную технику.
- Шаг 1: Злоумышленник создал новый пул Fusion
TUNA/USDC. Этот пул использовал настоящие минтыTUNAиUSDC, но был отдельным от обычного рыночного пула DeFiTuna. Пул был инициализирован по экстремальной цене вблизи тика208636, оцениваяTUNAпримерно в 1,149 миллиардаUSDCзаTUNA. При такой цене даже ничтожное количествоTUNAмогло поглотить сотни тысячUSDCв ходе свопа.


- Шаг 2: Злоумышленник разместил два небольших лимитных ордера на продажу в новом пуле. Каждый ордер внёс
0.000526 TUNA, итого0.001052 TUNA. Поскольку цена пула была крайне высокой, это ничтожное предложениеTUNAмогло поглотить всю сумму заёмногоUSDCпри выполнении свопа.


- Шаг 3: Подготовив пул, злоумышленник открыл спотовую позицию DeFiTuna с
TUNAв качестве токена позиции иUSDCв качестве токена залога. Злоумышленник предоставил0 USDCв качестве залога и занял570,000 USDCиз хранилищаUSDCDeFiTuna.

- Шаг 4: Перед свопом DeFiTuna сравнил цену обычного рыночного пула с ценой оракула. Спотовая цена обычного пула была близка к цене оракула, поэтому проверка была пройдена. Данная проверка валидировала только обычный рыночный пул DeFiTuna; пул Fusion не проверялся.

- Шаг 5: Своп следовал предоставленному злоумышленником маршруту Jupiter, который направлял средства через подконтрольный злоумышленнику пул Fusion с минимальным выводом, фактически установленным на ноль. После уплаты комиссии протокола
569,601 USDCбыл направлен в атакующий пул, тогда как позиция DeFiTuna получила лишь494сырых единицыTUNA(0.000494 TUNA).


- Шаг 6: После свопа позиция удерживала долг приблизительно в
570,000 USDCи лишь пылевое количествоTUNA. Когда DeFiTuna конвертировал балансTUNAв стоимость вUSDC, результат округлился до0. Проверка здоровья трактовалаtotal == 0как здоровое состояние, поэтому позиция с безнадёжным долгом была принята.


- Шаг 7: Злоумышленник вывел
USDC, накопленный в подконтрольном ему пуле Fusion. Два вывода были почти равными, соответствуя двум позициям лимитных ордеров, созданным на шаге 2.
Заключение
Первопричиной стала ветка total == 0 в проверке здоровья, принимавшая позицию как здоровую вне зависимости от наличия непогашенного долга. Маршрутизация и ликвидность под контролем злоумышленника создали условия для активации этого дефекта, однако именно проверка здоровья являлась финальным контролем, который должен был предотвратить возникновение безнадёжного долга.
Наиболее прямым исправлением является отклонение любой позиции, где total == 0 и debt > 0. Позиция с нулевой стоимостью и непогашенным долгом никогда не является здоровой. Кроме того, протокол должен самостоятельно вычислять минимально допустимый вывод свопа на основе цены оракула и суммы займа, независимо от предоставленных вызывающей стороной параметров маршрута. Привязка проверки оракула/цены к фактическому пулу свопа или верификация вывода свопа относительно вычисленного протоколом минимума предотвратила бы обход проверки перед свопом путём маршрутизации через невалидированный пул.
Ссылки
Начните работу с Phalcon Explorer
Изучайте транзакции, чтобы принимать взвешенные решения
Попробовать бесплатноДругие инциденты этой недели
BarnBridge
15 июля 2026 года BarnBridge, протокол распределения доходности на Ethereum, был атакован приблизительно на $776K в USDC [1]. Первопричиной стало то, что заброшенный контракт управления сохранил полномочия на изменение критической конфигурации протокола. Злоумышленник приобрёл достаточную долю голосов для принятия вредоносного предложения, заменившего контроллер компонента протокола, после чего использовал новый контроллер для перевода одобренного пользователями USDC.
Предыстория
BarnBridge — протокол под управлением DAO, распределяющий средства пользователей по различным рынкам кредитования для получения дохода. Голосовая сила определяется количеством застейканного BOND и сроком блокировки. Для создания предложения требуется голосовая сила не менее 1% от общей. Предложение должно набрать минимальный кворум в 40% и получить не менее 60% голосов участников «за», чтобы быть принятым. После подачи предложение проходит двухдневный период подготовки, трёхдневный период голосования и двухдневный период очереди, прежде чем может быть исполнено.
Анализ уязвимости
Первопричиной стало то, что заброшенный контракт управления сохранил полномочия на изменение критической конфигурации протокола после его вывода из эксплуатации. Система управления контролировала назначение Controller для CompoundProvider — контракта, которому пользователи ранее одобрили расходование своего USDC. Поскольку BarnBridge был выведен из эксплуатации, общий объём застейканного BOND и активное участие значительно снизились, что сделало прохождение враждебного предложения тривиально достижимым.
Анализ атаки
Следующий анализ основан на транзакции 0xd191fe...895afb.
Злоумышленник потратил приблизительно 0,335 ETH на приобретение около 32 795 BOND, затем внёс и заблокировал 32 000 BOND, получив примерно 43% от общей голосовой силы.
- Шаг 1: Злоумышленник развернул прокси-контракт и подал вредоносное предложение. После двухдневного периода подготовки злоумышленник использовал всю свою голосовую силу «за», выполнив требования как по кворуму, так и по одобрению.


- Шаг 2: Злоумышленник поставил предложение в очередь. После истечения двухдневного периода очереди злоумышленник исполнил его, установив
ControllerдляCompoundProviderв значение прокси-контракта злоумышленника.

- Шаг 3: Злоумышленник обновил логику прокси-контракта и вызвал
_takeUnderlying(), который использовал непогашенные разрешения наUSDCпримерно 50 пользователей для перевода ихUSDCвCompoundProvider. Затем злоумышленник вызвалtransferFees()для перенаправления средств на адрес злоумышленника, получив прибыль приблизительно $776K вUSDC.

Заключение
При выводе DAO или протокола из эксплуатации его контракт управления должен отказаться от полномочий или навсегда заблокировать возможность изменения критически важных для безопасности конфигураций — особенно прав администратора, контроллера и вывода средств. Конкретные меры включают отзыв роли администратора контракта управления над нижестоящими контрактами, передачу владения на адрес сожжения или исполнение финального предложения, отключающего функции обновления и устанавливающего ссылки на контроллеры в неизменяемые безопасные значения. Сохранение полномочий управления в выведенном из эксплуатации протоколе создаёт низкозатратную поверхность атаки: по мере снижения участия капитал, необходимый для достижения кворума, пропорционально уменьшается.



