Ошибка в 1 сатоши и искусственный взлёт цены: ущерб превысил $75 млн
01.09.2026 | CoinKyt Company
5 мин
share button
30–31 августа 2026 года произошло два крупных инцидента. В Tectonic Finance злоумышленник разогнал цену собственного токена в сто раз и занял под него ликвидные активы на $75 млн. В Balancer V1 округление при почти пустом резерве позволило получить долю пула за 1 сатоши и вывести около $260 тыс.
Расследование «КоинКит» анализирует, как работали обе атаки и куда ушли средства.

Введение

Пул ликвидности — это хранилище криптовалюты, в котором пользователи обменивают одни токены на другие. За предоставление активов поставщики получают специальные токены доли — BPT (Balancer Pool Token). Позже они могут вернуть BPT и забрать свою долю из пула.
Залог — это актив, который пользователь вносит в протокол, чтобы получить возможность занять другие активы. Если залог падает в цене, позицию ликвидируют. Если цену можно искусственно разогнать — можно получить слишком большой займ.
Оба инцидента показали, что математические особенности протоколов — округление и расчёт стоимости залога — могут стать точкой входа для кражи.

 


Tectonic Finance — манипуляция ценой собственного токена


Ход инцидента


1. Злоумышленник начал скупать токен TONIC — собственную криптовалюту протокола Tectonic. Этот токен обладал крайне низкой ликвидностью: на рынке было доступно всего около $1,34 млн для покупки, а суточный объём торгов составлял примерно $11 тыс. На таком «тонком» рынке даже небольшие сделки способны резко двигать цену.

2. За 20 минут цена TONIC выросла примерно в 100 раз. Это была не естественная динамика, а искусственный взлёт от контролируемых покупок.

3. Злоумышленник внёс разогнанные TONIC в протокол в качестве залога. Tectonic оценил эту позицию по новой завышенной цене — примерно в $375 млн.

4. Протокол разрешал занимать активы на сумму до 20% от стоимости залога. По завышенной оценке это давало доступ к ~$75 млн в ликвидных активах — прежде всего в стейблкоинах (криптовалютах, привязанных к доллару).

5. Злоумышленник занял эти активы. Реальная стоимость его залога была значительно ниже, чем считал протокол, поэтому займ не был обеспечен по-настоящему.

6. Когда атака была обнаружена, валидаторы сети Cronos — те, кто подтверждает транзакции — полностью остановили сеть. Это не позволило злоумышленнику вывести всё похищенное. В Ethereum через сервис Relay.Link успели перевести только около $6,3 млн.

 


Почему это стало возможным


Tectonic принимал в качестве залога актив с недостаточной ликвидностью. Когда рыночная глубина токена измеряется миллионами, а суточные обороты — тысячами, цену легко манипулировать. Протокол использовал отображаемую рыночную цену для расчёта залога, не учитывая, реальна ли эта цена при попытке продать актив. Коэффициент залога в 20% от «бумажной» стоимости открыл доступ к десяткам миллионов реальных стейблкоинов.

 


Детали расследования: движение средств


До остановки сети злоумышленник перевёл в Ethereum через Relay.Link стейблкоины USDT и USDC.e, обменяв их преимущественно на USDC на общую сумму ~$6,3 млн. После этого все USDC были обменяны на 2 592 ETH. Средства остаются на адресе:
0xc404160b79bd8905061a1caecbeca2eeab3f72dd

Остальные активы, оценивавшиеся примерно в $68,7 млн, остались заблокированы в сети Cronos на двух адресах:

0x7d4e7e5dcb0ccc66b4f0f8b0f30da5078ad4f2dc
— ~$60 млн

0x215adfc84332d8dfdd5afc77af69cceec0bcd3fc
— ~$8 млн

 


Balancer V1 — округление при почти пустом резерве


Ход инцидента


1. Злоумышленник развернул несколько вспомогательных контрактов. С помощью мгновенных кредитов (flash-loans) из протоколов Spark, Aave, Morpho и Uniswap V3 он провёл серию обменов в старых пулах Balancer V1. Цель — выкачать из пула почти весь WBTC (это «обёрнутый» биткоин — токен-версия BTC в сети Ethereum).

2. Когда резерв WBTC в пуле стал крайне маленьким — почти нулевым — злоумышленник запросил выпуск BPT, то есть токенов доли пула.

3. Функция joinswapPoolAmountOut работала так: пользователь говорит, сколько BPT он хочет получить, а контракт рассчитывает, сколько WBTC для этого нужно внести. Из-за почти нулевого резерва и разницы в точности между WBTC (8 знаков после запятой) и внутренней арифметикой Balancer (18 знаков) расчёт округлился до минимальной единицы — 1 сатоши (0,00000001 WBTC).

4. Контракт проверил только три условия: сумма не равна нулю, не превышает лимит пользователя и не превышает максимальную долю входа. Минимальный эффективный вклад, минимальный остаток в пуле или допустимая ошибка расчёта — не проверялись.

5. За 1 сатоши контракт выпустил 4 408,8 BPT. Злоумышленник использовал эти токены для выхода из пула и получения реальных активов: DPI, USDC, WETH и WBTC.

 


Почему это стало возможным


В старой версии Balancer V1 путь обычного входа в пул не содержал проверки на разумность расчёта. Административная функция rebind имела защиту минимального баланса, но пользовательский путь — нет. Комбинация исчерпанного резерва, разницы в точности и отсутствия проверки минимального вклада позволила получить долю пула за бесконечно малую цену.

 

Детали расследования: движение средств


После атаки токены были выведены с трёх вспомогательных контрактов на промежуточные адреса. Там основную часть активов обменяли на WETH, затем на обычный ETH. Все средства были собраны на адресе:
0xBd35EEC49c513758Fd7Fd80b86393d8966791E06

 


Заключение


Инциденты в Tectonic Finance и Balancer V1 показали две разные, но одинаково опасные слабости: доверие к рыночной цене низколиквидного актива и отсутствие проверки разумности математического расчёта при крайних значениях.

В Tectonic протокол принял завышенную цену манипулируемого токена за реальную стоимость залога и выдал займ, не обеспеченный реальными активами. В Balancer округление при почти пустом резерве превратило 1 сатоши в полноценную долю пула.