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

Vyper — це орієнтована на контракт мова пітонічного програмування для віртуальної машини 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) Домінування різних мов програмування в TVL Джерело: 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 через попередні транзакції.

Скріншот 2023-07-31 о 21.08.31

О 22:00 30 липня за пекінським часом JPEG'd підтвердив, що пул pETH-ETH Curve використовувався зловмисно.

2g2jUlVcktQTJmqFFZUPSVONMA6O9Jbp7HcbQEKd.png

Пізніше Vyper оголосив, що версії 0.2.15, 0.2.16 і 0.3.0 містять зламаний блокування повторного входу. Метроном і Alchemix також постраждали після твіту Vyper.

mRZI1JtH7Qv7Mvk09k7ex0chKgffsFir98ebzqtD.png

Оголошення Metronome DAO:

FTzOyIh9Z8Opc6soNd4zLzAcKQGuLxWY2QEefPPV.png

F9Dh7bMfVanq8deivVbWwhF24E3gbbIpThEq0t5l.png

8MYwVijoFiaJPL32YVTK6AOQHeHsZvZXyxIfmF9h.png

Рано на другий день дня за пекінським часом Curve Finance оголосила на Discord, що залишковий фонд не постраждав від помилки Vyper і є безпечним.

PsdIMHoBSb8vtyuFjjlO4ZsCrmKfIC6IY6I40DkB.png

aLVrLdFyKeWEz7Jd1sqydWD4dTUWmpGw8Oj7PY0W.png

Curve Finance оголосила в Twitter, що пул на Arbitrum був потенційно зламаний, але не було прибуткових експлойтів для зловмисників, що означає, що пул навряд чи буде зламано. CertiK також не виявив інших атак з використанням уразливості Vyper.

iqFUjHgxsKZF0Hw4cIndWFLBVQBC8VyjPCrNnDNk.png

Процес атаки

Ось приклад угоди, націленої на JPEG:

Зловмисник: 0x6ec21d1868743a44318c3c259a6d4953f9978538

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

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. 3740 pETH і 34316 ETH було передано в контракт атаки, і була запущена функція fallbak() контракту атаки, яка передала контроль зловмиснику. У функції fallback() зловмисник додав ще 40 000 ETH ліквідності до пулу pETH-ETH-f і отримав 82 182 pETH.

4 Зловмисник знову викликає remove_liquidity(), забирає 10 272 pETH і отримує 47 506 ETH і 1184 pETH. Потім зловмисник обміняв 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 для 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 рік також показує збільшення втрат через атаки з перенацілюванням у 2022 році на 259,45%.

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • Прокоментувати
  • Поділіться
Прокоментувати
0/400
Немає коментарів
  • Закріпити