Списали 50 токенов, а долг уменьшили на 140 тыс: ошибка погашения в Zentra Finance
17.09.2026 CoinKyt Company
3 мин
share button
9 сентября 2026 года злоумышленник воспользовался ошибкой в механизме погашения долга протокола Zentra Finance и похитил около 140 тыс. ctUSD. Он списал с себя минимальное количество депозитных токенов, но система уменьшила его долг на гораздо большую сумму. Расследование «КоинКит» анализирует, как именно сработала атака и куда ушли средства.

 


Введение


Zentra Finance
— это протокол кредитования в сети Ethereum. Пользователи вносят криптовалюту как обеспечение и получают займы в стейблкоине ctUSD, который выпускает сам протокол.

Депозитные токены (zctUSD)
— это внутренние токены Zentra, которые пользователь получает, когда вносит ctUSD обратно в протокол. Они подтверждают, что у него есть депозит, и могут использоваться для погашения долгов.

Мгновенный кредит (flash loan)
— это кредит, который берётся и возвращается в рамках одной транзакции. Если в конце транзакции деньги не вернуты — вся операция отменяется.

 


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

  1. Злоумышленник взял мгновенный кредит на примерно 200 тыс. USDC.e и внёс их в Zentra Finance как обеспечение.

  2. Он занял под это обеспечение около 140 тыс. ctUSD. На этом этапе у него был долг перед протоколом.

  3. Затем он внёс около 50 ctUSD в протокол и получил около 50 zctUSD — депозитных токенов.

  4. Он вызвал функцию repayWithATokens, которая позволяет погашать долг депозитными токенами. В запросе он указал сумму погашения — около 140 тыс. ctUSD.

  5. Система проверила баланс злоумышленника: у него было только около 50 zctUSD. Она корректно ограничила списание — сняла с него только 50 токенов.

  6. Но из-за ошибки в коде сумма, на которую уменьшился долг, рассчитывалась не по реально списанным токенам, а по первоначально указанной в запросе сумме. Долг уменьшился на 140 тыс. ctUSD, хотя в резерв протокола вернулось лишь 50 ctUSD.

  7. Система посчитала крупный долг погашенным. Злоумышленник забрал своё обеспечение — 200 тыс. USDC.e — обратно, вернул мгновенный кредит и остался с 140 тыс. ctUSD. Чистый ущерб для протокола составил около 140 тыс. ctUSD.

 

 

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

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

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

Это привело к ситуации, при которой с пользователя списали 50 токенов, а его долг уменьшился на 140 тыс. ctUSD. Отсутствие проверки соответствия между реально списанными токенами и уменьшением долга позволило обнулить задолженность без реального возврата средств в резерв.
 

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


Похищенные 140 тыс. ctUSD поступили на адрес злоумышленника:
0x8d85840F4c05a5D7385498F2a75daa54c6507b4b

Оттуда средства были отправлены на адрес:
0xA73d72d6A858Df742fe756dA5Cb61C2288A95C17
где были обменяны на USDC.E и отправлены через USDC-мост Citrea в сеть Ethereum. Там они поступили в виде USDC на тот же адрес, были обменяны через MetaMask на 55,16 ETH и переведены на адрес:
0x4Eb55301D7848750059300e5CA62ec8De3B4f56A
где и остаются на момент расследования.

 


Заключение


Инцидент в Zentra Finance показал, что ошибка в логике погашения долга может привести к полному списанию задолженности без соответствующего возврата средств в резерв. Система корректно ограничила списание токенов балансом пользователя, но некорректно рассчитала сумму прощённого долга.