Как FoxMarket посчитал токены по старой цене и потерял $119 тыс
17.08.2026 | CoinKyt Company
4 мин
share button

15 августа 2026 года контракт FoxMarket выпустил злоумышленнику десятки миллионов токенов, которые не были обеспечены реальными вложениями. Всё потому, что расчёт количества токенов и фактическое изменение цены произошли в разные моменты одной и той же транзакции — и контракт не заметил противоречия.

 


Введение


FoxMarket — протокол на BNB Smart Chain, предлагающий механику облигаций. Облигация в данном контексте — это инструмент, при котором пользователь вносит активы и получает взамен токены FOX по расчётной цене. Количество выдаваемых токенов зависит от текущей рыночной цены FOX: чем дороже токен — тем меньше FOX выдаётся за ту же сумму, и наоборот.


Цену FOX контракт брал напрямую из пула FOX/USDT на PancakeSwap. Это и стало ключевой уязвимостью.

 


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


1️⃣ Флэш-лоан на крупную сумму. Злоумышленник взял мгновенный кредит — флэш-лоан, который берётся и возвращается в рамках одной транзакции без залога. Сумма займа позволила провести масштабную операцию с пулом.


2️⃣ Расчёт токенов по «старой» цене. В начале операции контракт FoxMarket снял текущую цену FOX из пула и рассчитал, сколько токенов выдать злоумышленнику. Это значение было зафиксировано внутри транзакции.


3️⃣ Выкуп почти всего FOX из пула. Следующим шагом — в рамках той же транзакции — контракт направил около 241 млн USDT на покупку FOX в пуле FOX/USDT. Такой объём выкупил почти весь FOX из пула и радикально изменил его цену и соотношение активов. FOX резко подорожал.


4️⃣ Выпуск токенов по старому расчёту. Но расчёт количества выдаваемых FOX уже был зафиксирован — по цене до операции. Контракт не пересчитал его после того, как цена изменилась. В итоге система выпустила около 91,3 млн FOX и 88,66 млн sFOX (стейкинговая версия FOX — токен, представляющий заблокированную в стейкинге позицию) — значительно больше, чем реально обеспечивал фактический вклад.


5️⃣ Продажа вознаграждения. Дополнительно злоумышленник получил около 2,66 млн FOX в виде 3% вознаграждения, предусмотренного механикой протокола. Значительная часть этих токенов была тут же продана обратно за BSC-USD — стейблкоин в сети BNB Smart Chain.

 


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


Здесь две взаимосвязанные ошибки.


Первая: использование спотовой цены.
Контракт брал цену FOX из пула в моменте — без усреднения за период времени (TWAP). Спотовую цену можно изменить в рамках одной транзакции с помощью крупной покупки или продажи. Надёжная альтернатива — TWAP (Time-Weighted Average Price): средняя цена за промежуток времени, которую невозможно существенно сдвинуть одной операцией.


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


В совокупности это создало ситуацию, при которой выпуск токенов был рассчитан по одной цене, а реальные операции происходили совсем по другой.

 


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


После получения прибыли в виде BSC-USD средства прошли через цепочку промежуточных адресов и осели на адресе 0x005806c04Ec29fE0740eb508c5F431C230B031e2.


На момент расследования средства остаются на этом адресе без движения.


Транзакция атаки: 0x8e1775cbfd44db29744cc6687ff1822d2c47321de6e94062f789ad6181ad5514

 


Заключение


Атака на FoxMarket — ещё один пример манипуляции спотовой ценой в сочетании с логической ошибкой в порядке операций. Контракт рассчитал выпуск токенов по одной цене — и не предусмотрел, что в рамках той же транзакции эта цена может быть многократно изменена.


Примечательно, что все похищенные средства — около $119 тыс. в BSC-USD — по-прежнему лежат на известном адресе без каких-либо попыток вывода или анонимизации. Это нетипично и потенциально создаёт возможность для реагирования.