В воскресенье, 30 июля 2023 г., мир децентрализованных финансов потрясла крупная атака, использовавшая уязвимость в языке программирования Vyper, применявшемся в нескольких пулах ликвидности протокола Curve. Как злоумышленникам удалось похитить более 41 млн долларов?
Виновата уязвимость в языке Vyper
Злоумышленники воспользовались уязвимостью в некоторых пулах ликвидности Curve, популярного протокола децентрализованного финансирования (DeFi). Уязвимость была обнаружена в Vyper, альтернативном языке программирования смарт-контрактов Ethereum.
По данным компании BlockSec, уязвимость была использована в нескольких пулах Curve, использующих Vyper, что привело к убыткам, оцениваемым в 41 млн. долл. Так, версии Vyper 0.2.15, 0.2.16 и 0.3.0 оказались уязвимы к атаке reentrance.
Конкретно это происходит, когда функция смарт-контракта осуществляет внешний вызов другого ненадежного смарт-контракта. Последний затем выполняет рекурсивный вызов исходной функции с целью слива средств. Поскольку смарт-контракт не обновляет свое состояние перед отправкой средств, злоумышленник может постоянно вызывать функцию вывода средств для их слива.
Согласно анализу, проведенному компанией Ancilia, 136 смарт-контрактов использовали Vyper 0.2.15, 98 смарт-контрактов — Vyper 0.2.16 и 226 смарт-контрактов — Vyper 0.3.0:
Мы провели быструю проверку на github.
Найдено 136 контрактов, скомпилированных с помощью vyper 0.2.15 и использующих реентерабельную защиту;
98 контрактов найдено с версией 0.2.16
226 контрактов с версией 0.3.0— Ancilia, Inc (@AnciliaInc) July 30, 2023
В результате несколько бассейнов были полностью очищены от ликвидности:
- Пул CRV-ETH компании Curve: убыток $14 млн.
- Пул alETH-ETH компании Alchemix: потери 13,66 млн долл;
- пул pETH-ETH компании JPEG: убыток $11,4 млн;
Пул sETH-ETH компании Metronome: потери 1,6 млн. долл.
В своем Twitter компания Vyper пояснила, что сбой произошел из-за компилятора языка программирования, который в некоторых случаях давал сбой. В результате защита от атак reentrance не сработала.
Токен CRV резко падает
После атаки на пулы Curve цена CRV начала стремительно падать. Всего за 60 минут цена CRV упала с 0,70 до 0,59 доллара, то есть примерно на 16%:

Эволюция цены CRV после атаки