Глубокий анализ инцидента с кражей 9 миллионов долларов в Yearn: от уязвимостей протокола до испарения долларовой стоимости

1 декабря 2025 года протокол Earn подвергся хорошо спланированной многослойной атаке с использованием соединений в истории DeFi, что в итоге привело к потере примерно $9 миллионов пользовательских активов. Это не просто единичная точка эксплуатации, а систематическое уничтожение злоумышленниками, использующими флеш-займы для привлечения средств, слой за слоем прорыва механизмов защиты протокола, бесконечного создания токенов LP, связанных с yETH, и в конечном итоге исчерпания пула. Этот инцидент вновь предупреждает всю индустрию: риск безопасности DeFi-протоколов заключается не в одной уязвимости, а в наложении множества дефектов — это самый сложный режим атаки в отрасли для защиты от них.

Обзор события: Как флеш-займы могут стать предметом для многоступенчатых атак

Стратегия финансирования злоумышленника может показаться обычной, но она закладывает основу для серии последующих операций по цепочке. Они одновременно запускали флэш-кредиты по протоколам Balancer и Aave, а также одновременно предоставляли большое количество деривативов ETH, таких как wstETH, rETH, WETH, ETHx и cbETH. Эти активы не входили напрямую в сделку, а были тщательно распределены: 100 из 1 100 ETH были отправлены в Tornado. Наличные для смешивания — шаг, настоящая цель которого заключалась в маскировке источника средств и проложении пути для последующих операций по «отбелке».

После завершения смешивания злоумышленник снял 100 ETH 0x3e8e7533dcf69c698Cf806C3DB22f7f10B9B0b97 адрес вредоносного контракта и активировал его резервную функцию. В рамках этого скрытого возврата все заимствованные активы конвертировались в LP-токены для взвешенного yETH стабильного свопа пула — эквивалент покупки «акционных сертификатов» для этого пула. На первый взгляд это обычная инъекция ликвидности, но на самом деле это финальная подготовка к изысканной «технике опорожнения бассейна».

Три основные уязвимости: фатальная комбинация потери точности, сокращения доходов и нулевой инициализации поставок

Уязвимость первого уровня: потеря точности и вмешательство в государство без затрат

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

Первый ход атакующего — намеренно создать крайний дисбаланс активов в пуле. Он неоднократно использовал функцию add_liquidity (добавление ликвидности), но сознательно пропустил введение индексов 3 (rETH), индекса 6 (wOETH) и индекса 7 (mETH), тем самым искусственно увеличив разрыв между этими тремя активами и другими активами. Впоследствии он в одиночестве ввел огромное количество rETH, что ещё больше увеличило дисбаланс.

В этом крайне несбалансированном состоянии пула атакующий вызывает remove_liquidity, но вводит параметр суммы вывода 0. Согласно обычной логике, вывод 0 токенов должен возвращаться напрямую и не должен меняться в состоянии. Но контракт pool.vy этого не делает — он всё равно выполняет полный цикл расчёта vb_prod (виртуального балансового продукта).

В математических условиях экстремального дисбаланса веса функция _pow_down (округление вниз) приводит к значительной потере точности. Контракт ошибочно вычисляет небольшое значение vb_prod и записывает это изменённое значение в глобальное состояние packed_pool_vb. По сути, злоумышленник успешно вмешился в балансовую стоимость всего пула с помощью операции «с нулевой стоимостью» (токены не были переданы).

Лазейки второго уровня: продажа доходов и снижение долей

Второй уровень уязвимостей более скрыт. Когда злоумышленник вызывает update_rates функцию, это запускает внутреннюю _update_supply логику. Поскольку vb_prod были злонамеренно подавлены, система создала ложное впечатление, что общая стоимость пула резко сократилась. Для балансировки баланса контракт автоматически сжигает большое количество LP-токенов, находящихся в контракте стейкинга.

Злоумышленник точно провёл арбитражные операции до и после обновления обменного курса. Каждый звонок update_rates обновлять обменный курс конкретного актива (например, wOETH, mETH), а затем немедленно звонить remove_liquidity выводить актив. Поскольку большое количество акций контракта на стейкинг было уничтожено, относительно говоря, доля акций LP, находившихся в руках злоумышленника, пассивно увеличилась. Повторяя этот цикл «обновление-извлечение-сжигание», злоумышленник шаг за шагом выжимал фактический баланс wOETH и mETH в пуле, одновременно увеличивая общий запас пула до опасной границы нулевого значения.

Уязвимость третьего уровня: точка перелома безлимитного чеканки без запасов

После серии операций на первых двух этапах пул был опустошён: общий запас близок к нулю, а остаток wOETH и mETH крайне низок. В этот момент атакующий наносит последний смертельный удар: вызывает add_liquidity с введёнными параметрами [1, 1, 1, 1, 1, 1, 9] — то есть первые семь активов вводят по 1 вэй (наименьшую единицу), а восьмой (mETH) — 9 вэй.

Эта, казалось бы, абсурдная операция вызвала вычислительный сбой контракта в критический момент, когда пул собирался быть уничтожен. Итеративная формула _calc_supply не сработала при работе с минимальной стоимостью, и контракт был неправильно отчеканен235 443 токенов yETH LP。 Это эквивалентно созданию миллионов долларов поддельных активов из воздуха.

Подробное объяснение четырёх стадий атаки: от крайнего дисбаланса до бесконечного чеканки

Этап 1: Подготовка фонда и инициализация состояния пула

  • Заимствовать несколько производных ETH у Balancer и Aave
  • Маскировка источника средств с помощью Tornado. Смешивание денежных средств
  • Конвертировать все смешанные фонды и заёмные активы в токены yETH LP

Этап 2: Искусственное производство экстремального дисбаланса

  • Многократные односторонние инъекции ликвидности, пропуская конкретные токены (rETH, wOETH, mETH)
  • Одностороннее введение больших объёмов rETH ещё больше усугубляет дисбаланс
  • Этот этап создаёт математические условия для потери точности

Этап 3: Захват доходов и захват акций

  • Активировать потерю точности на remove_liquidity (0).
  • Колл update_rates обновление курса, что приводит к уничтожению токенов LP контракта на стейкинг
  • Повторяющиеся арбитражные операции для разлива балансов wOETH и mETH
  • Общее предложение пула сведено до 0

Фаза 4: Ноль запасов, неограниченная чеканка

  • Звоните add_liquidity, когда пул собирается уничтожить ([1,1,1,1,1,1,1,1,9])
  • Расчет _calc_supply контракта свалился из-за ошибочной чеканки 235 443 LP-токена
  • Злоумышленник завершает обмен активами через Exchange и Redeem.
  • Погашение флэш-кредитов, обмен приобретённых активов на ликвидные активы, такие как биткоин и доллары США для ликвидации

Путь отслеживания и ликвидации фондов: потеря стоимости от yETH до USD

Высшая чёрная комедия этой атаки заключается в цепочке побегов фондов. 235 443 LP-токена, полученные злоумышленниками, постепенно обменивались на ETH и стейблкоины через серию обменных операций. Эти активы затем обмениваются на более скрытые формы активов, такие как Биткоин, через торговые пары DEX, а в конечном итоге миллионы долларов активов обмениваются на наличные или биткоин через внебиржевые (OTC) платформы. В течение всего процесса $9 миллионов пользовательских средств были явно переведены с баланса протокола на кошелёк злоумышленника в цепочке, затем постепенно обменивались на доллары США, биткоин и т.д., и в итоге сбежали.

Последствия для отрасли: как DeFi-протоколы могут защитить от сложных атак на композицию

Из этого инцидента есть три ключевых урока:

Урок 1: Усиление проверки сцены по краям DeFi-протоколы должны проводить строгие логические проверки крайних сценариев, таких как «нулевая величина» и «крайний дисбаланс». remove_liquidity должен возвращаться сразу после получения параметра 0, а не выполнять полный цикл вычислений. Такой вид «короткого замыкания» может показаться простым, но он эффективно предотвращает возможность вмешательства в состояние.

Урок 2: Оптимизировать логику точного вычисления _pow_down и другие функции, связанные с экстремальными пропорциональными вычислениями, должны внедрять механизмы защиты. Рассмотрите возможность использования более сложной библиотеки численной обработки, добавления обнаружения промежуточного переполнения или использования различных ветвей алгоритмов в экстремальных ситуациях. Исторически протокол Balancer подвергался критике из-за аналогичных проблем с точностью, что является уроком из прошлого.

Урок 3: Установить мониторинг многомерных аномалий Необходимо создать систему мониторинга в реальном времени для раннего предупреждения о следующих операциях:

  • Высокая частота односторонних вливаний ликвидности приводит к сильному дисбалансу в пуле
  • Аномальные колебания обменного курса и автоматические процессы сгорания
  • Необычная частота операций с нулевой суммой и минимальной стоимостью
  • Общее предложение пула резко колеблется за короткий промежуток времени

Для всей экосистемы DeFi этот инцидент доказывает глубокую истину:Безопасность — это не устранение уязвимости, а систематическое предотвращение сочетания множества дефектов。 Разработчикам протоколов нужно смотреть на логику кода с точки зрения целостного процесса и не упускать из себя, казалось бы, «безобидных» конструктивных недостатков. В то же время отрасли необходимо усилить возможности отслеживания и заморозки капитальных потоков злоумышленников, а также улучшить общие возможности защиты через черные списки DEX и контроль рисков на платформе OTC. Взлом Yearn — это не конец, но он должен стать катализатором эволюции безопасности всей отрасли.

BAL-2,19%
AAVE-6,64%
ETH-2,5%
BTC-1,62%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • комментарий
  • Репост
  • Поделиться
комментарий
Добавить комментарий
Добавить комментарий
Нет комментариев
  • Закрепить