CertiK: подробное объяснение убытка Vyper в размере 52 миллионов долларов

Сообщалось об уязвимостях в версиях Vyper 0.2.15, 0.2.16 и 0.3.0, из-за чего многие пулы в Curve подвергались риску повторных атак. Эта уязвимость позволяет злоумышленнику вызвать функцию добавления ликвидности в процессе удаления ликвидности.

На данный момент пострадало в общей сложности 69,3 миллиона долларов, из которых 16,7 миллиона долларов были возвращены хакерами в белой шляпе. Это также означает, что в результате этого инцидента было украдено 52 миллиона долларов, что сделало его крупнейшей повторной атакой в 2023 году.

exsGmBiwYOSh5Seu3C6zysCmJcCD64sdWTvG5w0M.jpeg

Анализ инцидента с Vyper

Сводка событий

30 июля 2023 года было объявлено, что версии 0.2.15, 0.2.16 и 0.3.0 компилятора Vyper, контрактно-ориентированного языка программирования, разработанного для виртуальной машины Ethereum (EVM), имеют уязвимости сбоя блокировки повторного входа. Ошибка затронула несколько проектов DeFi, общая сумма убытков составила 52 миллиона долларов.

CertiK определила шесть адресов, причастных к инциденту. Первый (0x172) не смог использовать уязвимость в блоке 17806056. Первоначальный эксплуататор снял 0,1 ETH с Tornado Cash и приступил к созданию контракта на атаку. Однако ведущий кошелек (0x6Ec21) заплатил больше за газ и выполнил транзакцию первым, заработав около 6100 WETH (11,4 миллиона долларов).

YLsgfOUBbfcQ6Pgy77tT2prtmsSHe2U4s7HpuCV3.png

Уязвимость перед сбоем транзакции роботом MEV Источник: Etherscan Etherscan

Нарушение привело к дальнейшим потерям: EOA 0xDCe5d приобрела активы на сумму около 21 миллиона долларов. Детали задействованного кошелька следующие:

BQybD6x7JDeb56tNYa5gp3antJdgtukOJp5C71Gw.png

В общей сложности пострадало шесть проектов, было украдено около 69,3 миллиона долларов, из которых 16,7 миллиона долларов было возвращено, а общий убыток составил около 52 миллионов долларов.

Что такое Вайпер

Vyper — это контрактный язык программирования Python для виртуальной машины Ethereum (EVM). Vyper находится в стадии бета-тестирования с 2017 года, но его первым небета-релизом стала версия 0.2.1, выпущенная в июле 2020 года.

Solidity, доминирующий язык в экосистеме Ethereum, существует гораздо дольше, чем Vyper, поэтому многие члены сообщества создали инструменты, работающие исключительно с Solidity. Согласно данным DeFiLlama, из общей заблокированной стоимости (TVL), составляющей примерно 70 миллиардов долларов США в протоколах DeFi, на смарт-контракты Vyper приходится 2,17 миллиарда долларов США, в то время как на Solidity приходится подавляющее большинство, достигающее 67,49 миллиардов долларов США.

KjMot1urT10BOZJi8lgltDDN62IMhxVncPFncjoP.png

616cb7f4-e84a-479f-bd50-73e2adaec534 Общее заблокированное значение по источнику языка: DeFiLlama

По состоянию на 10 мая 2023 года доминирование Vyper упало с 30% в августе 2020 года до 6,27%. Несмотря на то, что доминирование Vyper в TVL было значительно ниже, чем у Solidity, событие все равно принесло прибыль в размере 62 миллионов долларов.

8G03pLGwavL4LcDkdTQS5EVlIywScZBcpTb4Fzeb.png

b89a9653-a2d4-4e89-9042-24e06ed1590a (1) Доминирование разных языков программирования в ТВЛ Источник: DeFiLlama

Версия компилятора

Версия компилятора относится к конкретной версии компилятора языка программирования, который преобразует исходный код, читаемый человеком, в машиночитаемый код.

Версии компилятора регулярно обновляются, чтобы добавлять функции, исправлять ошибки и повышать безопасность. В настоящее время Vyper Language не предлагает программу вознаграждения за обнаружение хакерских ошибок.

Версия 0.2.15–0.3.0

Как упоминалось выше, уязвимости были обнаружены в версиях Vyper 0.2.15, 0.2.16 и 0.3.0, что привело к повторным атакам на несколько проектов DeFi.

Самая ранняя версия эксплойта Vyper 0.2.15 была выпущена 23 июля 2021 года. К моменту выпуска версии 0.3.1 в декабре того же года предыдущая уязвимость перестала существовать.

Лента новостей

Инцидент впервые начался в 21:10 по пекинскому времени 30 июля. Транзакция злоумышленника для пула JPEG на Curve не удалась из-за предварительных транзакций.

Скриншот 31 июля 2023 г., 21.08.31

В 22:00 30 июля по пекинскому времени JPEG подтвердил злонамеренное использование пула pETH-ETH Curve.

2g2jUlVcktQTJmqFFZUPSVONMA6O9Jbp7HcbQEKd.png

Впоследствии Vyper объявил, что версии 0.2.15, 0.2.16 и 0.3.0 содержат сломанную блокировку повторного входа. Metronome и Alchemix также пострадали после того, как Vyper написал в Твиттере.

mRZI1JtH7Qv7Mvk09k7ex0chKgffsFir98ebzqtD.png

Анонс метронома DAO:

FTzOyIh9Z8Opc6soNd4zLzAcKQGuLxWY2QEefPPV.png

F9Dh7bMfVanq8deivVbWwhF24E3gbbIpThEq0t5l.png

8MYwVijoFiaJPL32YVTK6AOQHeHsZvZXyxIfmF9h.png

Рано утром второго дня по пекинскому времени Curve Finance объявила в Discord, что оставшийся пул средств не затронут ошибкой Vyper и находится в безопасности.

PsdIMHoBSb8vtyuFjjlO4ZsCrmKfIC6IY6I40DkB.png

aLVrLdFyKeWEz7Jd1sqydWD4dTUWmpGw8Oj7PY0W.png

Curve Finance объявила в Твиттере, что пул на Arbitrum был потенциально скомпрометирован, но не было никаких выгодных эксплойтов для выполнения злоумышленниками, а это означает, что пул вряд ли будет скомпрометирован. CertiK также не обнаружил никаких других атак, использующих уязвимость Vyper.

iqFUjHgxsKZF0Hw4cIndWFLBVQBC8VyjPCrNnDNk.png

Процесс атаки

Вот пример сделки с таргетингом на JPEG:

Злоумышленник: 0x6ec21d1868743a44318c3c259a6d4953f9978538

Контракт атаки: 0x466b85b49ec0c5c1eb402d5ea3c4b88864ea0f04#code

1 Злоумышленник сначала занимает 80 000 WETH (около 149 371 300 долларов США) у Balancer: Vault

2 Затем злоумышленник обменивает WETH на ETH, вызывает pETH-ETH-f.add_liquidity() и добавляет 40 000 ETH (около 74 685 650 долларов США) в пул pETH-ETH-f. Взамен злоумышленник получил 32 431 pETH (pETH-ETH-f).

3 Злоумышленник вызывает remove_liquidity(), чтобы удалить ликвидность, добавленную на шаге 2. 3 740 pETH и 34 316 ETH были переведены в контракт атаки, и сработала функция fallbak() контракта атаки, что дало контроль злоумышленнику. В функции fallback() злоумышленник добавил еще 40 000 ETH ликвидности в пул pETH-ETH-f и получил 82 182 pETH.

4 Злоумышленник снова вызывает remove_liquidity(), выводит 10 272pETH и получает 47 506 ETH и 1 184pETH. Затем злоумышленник обменял 4924 pETH на 4285 ETH в пуле pETH-ETH-f.

Всего злоумышленник получил 34 316 ETH на шаге 3, 47 506 и 4 285 ETH на шаге 4, всего 86 107 ETH. После погашения флэш-кредита в размере 80 000 ETH у злоумышленника осталось 6 107 ETH (~ 11 395 506 долларов США).

Уязвимости

Эта уязвимость позволяет злоумышленнику вызвать функцию добавления ликвидности в процессе удаления ликвидности. Хотя предполагается, что эти функции защищены с помощью @nonreentrant('lock'), тесты функций add_liquidty() и remove_liquidity() показали, что это не предотвращает повторные атаки.

HIhD33yKE94EHwUa7xkQhAzQRF4nscaJOwAPTOmK.png

Vyper_contract for Curve.fi Factory Pool Источник данных: Etherscan

Версии Vyper v0.2.15, v0.2.16 и v0.3.0 действительно имеют уязвимость отказа защиты от повторного входа после эксплойтов JPEG'd, Metronome и Alchemix.

Mr3KDb2SKoLhF770OEWBAtdTuOYZ88tchEodweuv.png

решение

Проекты, использующие уязвимые версии Vyper, должны обращаться к Vyper за помощью в смягчении последствий. Проекты также должны попытаться выполнить обновление до последней версии Vyper, не содержащей этой уязвимости.

Подведем итог

Атака на Vyper — крупнейшая уязвимость повторного входа, обнаруженная CertiK в 2023 году. С точки зрения финансовых потерь на эту атаку пришлось 78,6% таких инцидентов.

Две крупнейшие уязвимости года, связанные с повторным входом, использовали контракты, написанные в Vyper, хотя уязвимости не были идентичными.

В настоящее время потери из-за повторных атак во всех цепочках в 2023 году превысили 66 миллионов долларов. Это примерно на 4 миллиона долларов больше, чем за весь 2020 год, и всего на 1 миллион долларов меньше, чем убыток 2021 года. Примечательно, что общая сумма за 2023 год также представляет собой увеличение на 259,45% потерь из-за перенацеливания атак в 2022 году.

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • комментарий
  • Поделиться
комментарий
0/400
Нет комментариев
  • Закрепить