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

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

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

isSolvent в конечном итоге вызывает функцию _isSolvent, которая проверяет LTV (коэффициент отношения кредита к стоимости залога), требуя, чтобы соотношение между заимствованным активом и активом залога не превышало максимальное значение, установленное системой (_ltv <= maxLTV).
Можно видеть, что расчет LTV зависит от обменного курса (_exchangeRate), то есть цены (обменного соотношения) заимствованного актива относительно актива залога.
2. Анализ атаки
2.1 Анализ основной причины
С точки зрения кода контракта, ключевой причиной атаки было то, что в реализации ценового оракула Resupply Market имелась проблема. Для новых Market с низкой ликвидностью злоумышленник мог манипулировать обменным курсом с помощью donation-атаки, тем самым обходя проверку финансового состояния и заимствуя большое количество 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), соответствующих общей ликвидности в Market. Это в точности классический сценарий donation-атаки.
2.2 Анализ транзакции атаки
Согласно транзакции атаки [4], можно проанализировать, что злоумышленник выполнил следующие основные шаги:
-
Заимствовал 4000 USDC через флеш-кредит и обменял их на 3999 crvUSD.
-
Сделал пожертвование в размере 2000 crvUSD контракту Controller
0x8970. До пожертвования Controller0x8970держал 0 crvUSD. После пожертвования зарегистрированное количество crvUSD стало2000000000000000000000(с 18 десятичными знаками). -
Внес приблизительно 2 crvUSD в Vault
0x0114и получил 1 долю (cvcrvUSD). На этот момент зарегистрированное количество crvUSD составляло2002000000000000000001(с 18 десятичными знаками). -
Добавил 1 единицу (то есть 1 долю Vault
0x0114) залога в Market0x6e90. -
Заимствовал 10 000 000 reUSD из Market
0x6e90. На этот момент_exchangeRate = 0, что привело к_ltv = 0, поэтому проверка_isSolventбыла пройдена.

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

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

Поскольку price > 1e36, _exchangeRate = 0.
- Обменял заимствованный reUSD с целью получения прибыли.
3. Извлеченные уроки
Атакованный Market в 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: Convex — это протокол Curve для повышения доходности. Пользователи могут стейкать LP-токены Curve, чтобы получать более высокие награды в CRV, а также токены CVX от Convex. Convex контролирует почти 50% голосующей власти в управлении Curve и предоставляет механизмы повышения доходности для Prisma и Resupply.
Prisma: Prisma стейкает LP-токены Curve, а пользователи получают повышенные награды (cvxPRISMA) через Convex. Prisma зависит от ликвидности Curve и механизмов доходности Convex.
Yearn: 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 Market через Curve's OneWay Lending Factory.- Market использовал crvUSD в качестве заимствуемого актива и wstUSR в качестве токена залога.
- Контрактом ERC-4626 Vault был
0x0114, а соответствующим Controller —0x8970.
-
31 мая 2025 года: Новое предложение wstUSR-long LlamaLend Market было опубликовано на странице управления Resupply. Данное предложение направлено на то, чтобы позволить пользователям выпускать reUSD через LlamaLend Market.
-
11 июня 2025 года: Предложение было опубликовано в блокчейне.
-
26 июня 2025 года, 00:18:47 (UTC): Предложение было принято, и официальный адрес Resupply
0x0417развернул новый ResupplyPair (то есть Resupply crvUSD/wstUSR Market)0x6e90, связав Vault0x0114и Controller0x8970.- Связал Vault 0x0114 и Controller 0x8970.
- Использовал залоговую долговую позицию Vault (то есть cvcrvUSD, с crvUSD в качестве базового актива) в качестве залога.
-
26 июня 2025 года, 01:53:59 (UTC): Примерно через 1,5 часа после развертывания Market
0x6e90, злоумышленник успешно провел эксплойт. В тот же момент BlockSec обнаружил атаку и попытался связаться с командой проекта. -
26 июня 2025 года, 02:26 (UTC): После неудачной попытки связаться с командой и подтверждения отсутствия дальнейших потерь, BlockSec выпустил публичное предупреждение.
-
26 июня 2025 года, 02:53:23 (UTC): Команда проекта приостановила работу протокола.
5.2 Если бы существовал Phalcon Security, трагедию можно было бы предотвратить

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



