Устаревший контракт Huma Finance обошёлся протоколу в $101 тыс.
12.05.2026 | CoinKyt Company

11 мая 2026 года злоумышленник вывел около $101 тыс. из старых контрактов протокола Huma Finance на сети Polygon. Проблема оказалась в устаревших V1-контрактах, которые официально уже не использовались — средства пользователей в актуальной версии протокола не пострадали. Уязвимость позволила атакующему получить статус одобренного заёмщика без реального одобрения и вывести деньги из трёх пулов.

 


Что произошло


Huma Finance — это протокол децентрализованного кредитования. Пользователи могут брать займы (кредитные линии), а протокол управляет тем, кому и сколько разрешено занимать.


В старой версии контрактов (V1) существовала функция requestCredit() — буквально «запросить кредитную линию». Любой желающий мог её вызвать. Это само по себе не опасно: запрос ещё не означает одобрение. Но дальше в дело вступала другая функция — refreshAccount(), задача которой обновлять статус аккаунта.


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


Итог: атакующий в одной транзакции (0x7b8d641d76affcc029fd0e0f06ab81ad675b1da21ef79b82e1343016040ba359) вывел из трёх пулов:

- 82 315 USDC

- 17 290 USDC.e

- 1 783 USDC.e


USDC и USDC.e — это стейблкоины, привязанные к доллару. USDC.e — версия, которая появляется при переводе USDC из другой сети через мост.

 


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

Проблема была не в том, что кто-то взломал какую-то защиту. Проблема была в логике: система сама себя обманула.


Этапы получения займа в нормальном сценарии:


1️⃣ Пользователь запрашивает кредитную линию.


2️⃣ Администраторы рассматривают запрос и одобряют его.


3️⃣ Только после одобрения аккаунт получает статус «надёжного».


4️⃣ Пользователь может снимать средства.



В случае атаки:


1️⃣ Атакующий запросил кредитную линию.


2️⃣ Вызвал refreshAccount() — и система сама присвоила статус «надёжного», пропустив шаг одобрения.


3️⃣ Вывел средства как обычный заёмщик.


Никакой магии — просто функция обновления статуса не проверяла, было ли реальное одобрение.

 


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


1️⃣ Около $101 тыс. в USDC поступили на адрес атакующего 0x13B44e416e0f66359502E843AF2e1191f1260DaF в сети Polygon.


2️⃣ Через DEX-агрегатор LI.FI (сервис, который позволяет перемещать токены между разными сетями) средства были переброшены в сеть Ethereum на тот же адрес атакующего.


3️⃣ На момент расследования средства остаются на адресе злоумышленника и не выведены дальше.

 


Заключение


Атака на Huma Finance ещё раз показывает, насколько опасно оставлять в рабочем состоянии устаревшие, официально «выведенные из эксплуатации» контракты. Раз контракт доступен в сети — он остаётся целью. Huma подтвердила, что средства актуальной версии протокола не пострадали, однако $101 тыс. из старых пулов были безвозвратно выведены.

Средства на момент расследования так и остаются у злоумышленника в сети Ethereum.