26 июня 2025 года протокол стейблкоинов Resupply, развернутый в основной сети Ethereum, подвергся атаке, в результате которой было потеряно около 10 миллионов долларов США в активах. Из-за ошибки в реализации ценового оракула соответствующего контракта, злоумышленнику удалось манипулировать относительной ценой (т.е. обменным курсом между заемным активом и активом обеспечения) заемного актива (reUSD, выпущенного Resupply) для недавно созданных рынков с низкой ликвидностью с помощью «атаки через пожертвование» (donation attack), обнулив её. Это позволило злоумышленнику обойти проверку состояния актива (asset health check) и занять большое количество reUSD для извлечения прибыли.
После того как BlockSec первой в сети публично выпустила раннее предупреждение и предоставила предварительный анализ (Твит1, Твит2), команда Resupply впоследствии также опубликовала официальное заявление, но не раскрыла многие технические детали. В этой статье представлен более подробный анализ. С другой стороны, после атаки среди участников проекта и заинтересованных сторон возникли серьезные общественные разногласия. Эта статья углубится в обсуждение сложных экологических связей, стоящих за протоколом, для справки читателей.
1. Предыстория
1.1 О протоколе Resupply
Resupply — это протокол децентрализованных стейблкоинов, принадлежащий экосистеме Curve. Стейблкоин, выпускаемый Resupply, называется reUSD. Это децентрализованный стейблкоин, обеспеченный долговыми позициями (CDP), который поддерживается другими стейблкоинами (включая crvUSD и frxUSD), приносящими доход в кредитных рынках на внешних платформах. Пользователи могут предоставлять crvUSD и frxUSD для получения займа в reUSD, достигая рефинансирования своих стейблкоин-активов.

В частности, пользователи могут выполнять операции, связанные с кредитованием, на рынках Resupply Market, развернутых в блокчейне. Создание и поведение рынков управляются через DAO. Каждый рынок определяет хранилище ERC-4626 (Vault) в качестве актива обеспечения (collateral) и использует актив, соответствующий этому хранилищу, в качестве базового. Пользователи вносят залог (хранилище или базовый актив хранилища) на рынок, чтобы занять reUSD.
Возьмем в качестве примера рынок 0x6e90 и хранилище 0x0114, задействованные в этой атаке. Соответствующие активы (токены) представлены следующим образом:
-
Market
0x6e90- Базовый актив (underlying): crvUSD
- Обеспечение (collateral): cvcrvUSD (т.е. Vault
0x0114) - Заемный актив: reUSD
-
Vault
0x0114- Актив: crvUSD (фактически хранится в Curve LlamaLend Controller, который также является рынком)
- Обеспечение: wstUSR
- Заемный актив: crvUSD
- Доля (share): cvcrvUSD (токен ERC-4626, выпущенный хранилищем)
Другими словами, пользователи могут внести определенное количество cvcrvUSD (или crvUSD, которые на практике будут конвертированы в cvcrvUSD через хранилище) на этот рынок, чтобы занять reUSD.

1.2 Как система определяет, имеет ли пользователь право на заем актива?
Подобно общим кредитным протоколам, Resupply Market также выполняет проверку состояния актива (asset health check) позиции пользователя (через модификатор isSolvent).

Функция isSolvent в конечном итоге вызывает функцию _isSolvent, которая проверяет показатель LTV (коэффициент займа к обеспечению), требуя, чтобы соотношение между заемным активом и активом обеспечения не превышало максимальное значение, установленное системой (_ltv <= maxLTV).
Видно, что расчет LTV опирается на обменный курс (_exchangeRate), т.е. цену (обменное соотношение) заемного актива относительно актива обеспечения.
2. Анализ атаки
2.1 Анализ первопричины
С точки зрения кода контракта, ключевой причиной атаки стала проблема в реализации ценового оракула Resupply Market. Для недавно созданных рынков с низкой ликвидностью злоумышленник мог манипулировать обменным курсом с помощью «атаки через пожертвование», тем самым обходя проверку состояния и занимая большое количество reUSD для получения прибыли.
Как рассчитывается обменный курс?

Формула выглядит следующим образом:

Очевидно, что если getPrices возвращает цену больше 1e36, округление вниз при целочисленном делении приведет к _exchangeRate = 0.
Как манипулировать ценой?

Согласно коду, цена может быть рассчитана следующим образом:


Поскольку код устанавливает precision = 1, DEAD_SHARES = 1000, а shares = 1e18.

Наконец, после подстановки переменных, формула расчета цены выглядит так:

Видно, что для увеличения значения price ключевым моментом является значительное увеличение разрыва между total_assets и totalSupply: сделать total_assets крайне большим, при этом оставив totalSupply очень маленьким. В фактической реализации протокола Resupply значение total_assets в формуле зависит от базового актива (crvUSD), а totalSupply — от долей (cvcrvUSD), соответствующих общей ликвидности на рынке. Это именно сценарий классической «атаки через пожертвование».
2.2 Анализ транзакции атаки
Анализируя транзакцию атаки [4], можно сделать вывод, что злоумышленник выполнил следующие ключевые шаги:
- Занял 4000 USDC через флэш-кредит (flash loan) и обменял их на 3999 crvUSD.
- Пожертвовал 2000 crvUSD контроллеру
0x8970. До этого пожертвования на контроллере0x8970было 0 crvUSD. После пожертвования зафиксированное количество crvUSD составило2000000000000000000000(с 18 десятичными знаками). - Внес примерно 2 crvUSD в хранилище
0x0114и получил 1 долю (cvcrvUSD). В этот момент зафиксированное количество crvUSD составило2002000000000000000001(с 18 десятичными знаками). - Добавил 1 единицу (т.е. 1 долю хранилища
0x0114) обеспечения на рынок0x6e90. - Занял 10 000 000 reUSD на рынке
0x6e90. В этот момент_exchangeRate = 0, что привело к_ltv = 0, поэтому проверка_isSolventпрошла успешно.

Почему _exchangeRate был равен 0? Потому что предыдущими шагами злоумышленник манипулировал контрактом, чтобы довести его до следующего состояния:

Вспоминая метод расчета обменного курса:

Поскольку price > 1e36, _exchangeRate = 0.
- Обменял заемные reUSD для извлечения прибыли.
3. Извлеченные уроки
Атакованный рынок в Resupply использовал реализацию ценового оракула, похожую на контракт-шаблон Curve.

Однако в официальной документации Curve уже была указана область применения этой реализации — к сожалению, Resupply, по-видимому, не приняла во внимание это предупреждение о применимости при своем развертывании.
4. Отношения и общественные разногласия
4.1 Сложная сеть отношений пяти основных проектов в экосистеме Curve
Чтобы понять более глубокое влияние инцидента с Resupply, мы должны сначала взглянуть на сложные связи между пятью основными протоколами в экосистеме Curve.

Curve Finance — это ядро всей экосистемы, предоставляющее пулы ликвидности, crvUSD и протокол LlamaLend, которые лежат в основе работы Resupply, Prisma, Convex и Yearn. Convex оптимизирует доходность Curve через стейкинг и управление, а также предоставляет дополнительные механизмы вознаграждения для Prisma и Resupply. Prisma полагается на LP-токены Curve и функции повышения доходности Convex, в то время как Resupply напрямую основан на LlamaLend от Curve для выпуска reUSD и был совместно разработан Convex и Yearn. Yearn не только оптимизирует доходность пулов Curve, но и способствовал развитию Resupply посредством сотрудничества с Convex.
Curve Finance: Являясь базовой платформой, пулы ликвидности Curve (такие как пул crvUSD) и протокол LlamaLend напрямую используются Resupply для выпуска reUSD, Prisma для стейкинга LP-токенов, Yearn для оптимизации доходности и Convex для голосования по управлению.
Convex: Протокол повышения доходности Curve. Пользователи могут стейкать LP-токены Curve, чтобы получать более высокие вознаграждения CRV, а также токены CVX от Convex. Convex контролирует почти 50% голосов управления Curve и предоставляет механизмы повышения доходности для Prisma и Resupply.
Prisma: Stak’ет LP-токены Curve, пользователи получают повышенные вознаграждения (cvxPRISMA) через Convex. Prisma полагается на ликвидность Curve и механизмы доходности Convex.
Yearn: Агрегатор доходности, предлагающий пользователям высокую прибыль за счет оптимизации доходности LP-токенов Curve (усиленных через Convex). Yearn сотрудничала с Convex для разработки Resupply и активно использует пулы Curve в своих стратегиях доходности.
Resupply: Совместная разработка Convex и Yearn. Позволяет пользователям занимать reUSD, закладывая стейблкоины, такие как crvUSD, и автоматически стейкать токены на Convex для получения вознаграждений CRV и CVX, формируя цикл оптимизации доходности.
4.2 Разногласия и последствия
Однако, когда Resupply подверглась атаке, эта сложная сеть взаимоотношений немедленно оказалась в центре споров. Основатель Curve Майкл Егоров быстро дистанцировался от Resupply, подчеркнув:
«В этом проекте нет ни одного сотрудника из Curve… пожалуйста, не обобщайте на Curve».

Это заявление о дистанцировании отразило то, насколько хрупкими в кризисные времена могут быть запутанные кооперативные отношения внутри экосистемы DeFi.
Эти взаимосвязанные проекты вместе образуют высокосвязанную экосистему — в такой системе любая проблема в одном звене может вызвать цепную реакцию. Поэтому неудивительно, что атака на Resupply вызвала широкую дискуссию в сообществе о взаимозависимости протоколов и их безопасности.
5. Дополнительные размышления
5.1 Хронология
-
17 мая 2025 года: Официальный адрес Resupply
0x1f84развернул новый рынок LlamaLend через Curve OneWay Lending Factory.- Рынок использовал crvUSD в качестве кредитного актива, а wstUSR — в качестве токена обеспечения.
- Контракт хранилища ERC-4626 был
0x0114, а соответствующий контроллер —0x8970.
-
31 мая 2025 года: Было опубликовано новое предложение wstUSR-long LlamaLend Market на странице управления Resupply. Это предложение было направлено на предоставление пользователям возможности минтить reUSD через этот рынок LlamaLend.
-
11 июня 2025 года: Предложение было опубликовано в сети (on-chain).
-
26 июня 2025 года, 00:18:47 (UTC): Предложение было принято, и официальный адрес Resupply
0x0417развернул новую пару ResupplyPair (т.е. рынок Resupply crvUSD/wstUSR)0x6e90, привязав хранилище0x0114и контроллер0x8970.- Использовалась обеспеченная долговая позиция хранилища (т.е. cvcrvUSD, с crvUSD в качестве базового актива) в качестве обеспечения.
-
26 июня 2025 года, 01:53:59 (UTC): Примерно через 1,5 часа после развертывания рынка
0x6e90злоумышленник успешно выполнил эксплойт. В то же время BlockSec обнаружила атаку и попыталась связаться с командой проекта. -
26 июня 2025 года, 02:26 (UTC): Не сумев связаться с командой и подтвердив отсутствие дальнейших потерь, BlockSec выпустила публичное предупреждение.
-
26 июня 2025 года, 02:53:23 (UTC): Команда проекта приостановила работу протокола.
5.2 Если бы был Phalcon, трагедию можно было бы предотвратить

BlockSec Phalcon Security — это новейший прорыв в области защиты безопасности DeFi. Отслеживая транзакции на стадии мемпула, Phalcon способен идентифицировать аномальные паттерны в тот момент, когда транзакция атаки попадает в мемпул.
Система, работающая на базе интеллектуального механизма анализа, включает более 200 типичных сигнатур атак. За последние шесть месяцев она поддерживала крайне низкий уровень ложных срабатываний (менее 0,0001%), обеспечивая по-настоящему точное обнаружение угроз.
Система использует собственную стратегию подачи газа, чтобы гарантировать, что защитная транзакция опередит транзакцию атаки, одновременно автоматически активируя функцию экстренной приостановки протокола.
Весь процесс реагирования поддерживает несколько режимов контроля разрешений, включая EOA и кошельки с мультиподписью, предоставляя гибкие решения безопасности для различных типов протоколов.
Если бы Resupply интегрировала систему Phalcon при развертывании рынка, атаку можно было бы полностью предотвратить.
В течение 1,5 часов после развертывания рынка 0x6e90 система Phalcon автоматически обнаружила бы развертывание нового рынка, интеллектуально проанализировала бы его параметры конфигурации и выявила бы потенциальный риск атаки через пожертвование.
Система немедленно отправила бы предупреждение о риске команде проекта, предложив добавить защиту начальной ликвидности или настроить соответствующие параметры.
Даже после того, как атака произошла, развертывание Phalcon принесло бы огромную пользу Resupply и всей экосистеме Curve.
Прозрачная система мониторинга в режиме реального времени демонстрирует пользователям и сообществу твердую приверженность команды проекта безопасности, а механизм круглосуточной защиты гарантирует, что подобные инциденты никогда не повторятся. Публичные данные мониторинга безопасности повышают прозрачность проекта и являются критическим средством восстановления доверия сообщества. Для пострадавших проектов проактивное принятие первоклассного решения по безопасности доказывает их чувство ответственности за сохранность средств пользователей, а партнерство с лидером отрасли, таким как BlockSec, также служит сильным подтверждением репутации проекта в области безопасности.
В настоящее время более $50 миллиардов активов доверено защите Phalcon. Мы успешно остановили более 20 реальных хакерских атак, сохранив более $20 миллионов активов от потерь. За последние шесть месяцев система сохранила идеальный рекорд точности обнаружения и достигла миллисекундной скорости реагирования, всегда оставаясь на шаг впереди злоумышленников. Phalcon в настоящее время поддерживает более 20 основных блокчейн-сетей, включая Ethereum, BSC и Arbitrum, обеспечивая всестороннюю кроссчейн-защиту для экосистемы DeFi.
Потеря Resupply в размере $10 миллионов и бесчисленные другие инциденты напоминают нам, что в мире DeFi безопасность — это не опция, это необходимость для выживания.
Не ждите следующей атаки, чтобы пожалеть об этом. Разверните мощнейшую защиту для вашего протокола прямо сейчас.
Экспертная команда BlockSec готова провести комплексную оценку безопасности вашего проекта.
🔗 Phalcon Security APP:
https://blocksec.com/phalcon/security
🔗 Забронировать демо:
https://blocksec.com/book-demo



