
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.


