Это тот самый баг, который не дает командам протоколов спать по ночам. Эксплойт на $5M в ZKSwap, вызванный одной единственной инструкцией, оставленной не на своем месте. Вот подробный анализ того, как это произошло, и как мониторинг в цепочке мог бы это остановить. 🧵
1/ 9 июля GMX был взломан на 42 миллиона долларов. Но в тот день произошло еще кое-что, и почти никто не заметил: мост ZKSwap был тихо опустошен на 5 миллионов долларов. Интересная часть? Не было никакого сложного эксплойта. Просто критическая функция, которая… ничего не делала.
2/ ZKSwap — это zk-rollup, построенный на Ethereum. Как и многие роллапы, он использует мост для перемещения активов между L1 и L2. В качестве меры предосторожности мост включает в себя "Режим Исхода", способ для пользователей вернуть средства без необходимости в операторе. В теории это отличная идея. На практике…
3/ Режим Exodus позволяет пользователям вручную подтвердить, что они владели токенами в последнем проверенном состоянии L2. Это механизм резервного копирования: без доверия, само-хранение, неинтерактивный. Но реализация ZKSwap имела одну фатальную ошибку: Функция, отвечающая за проверку доказательств, ничего не проверяла. Буквально.
4/ Вот код, который должен был остановить атаку 👇 На первый взгляд, это выглядит как настоящий zk-доказательство верификатор. Но посмотрите внимательно на первую строку: return true; Вот и всё. Больше ничего не выполняется.
5/ Результат? Каждое "доказательство" вывода (независимо от того, насколько оно фальшивое) прошло проверку. Контракт принимал произвольные заявления о балансах токенов... и зачислял их так, как будто они были реальными. Это превратило механизм бездоверительной резервной копии в незащищенный кран.
6/ Нападающему не нужны были сложные эксплойты - достаточно было повторных вызовов exit() с вымышленными данными. Они обошли проверки баланса, выводили средства через несколько токенов и использовали слабую логику нулевателей, чтобы избежать обнаружения. Все это происходило, пока контракт говорил: ✅
7/ Это не был какой-то неясный крайний случай. Это была основная логика для восстановления активов, оставленная совершенно открытой. И поскольку режим Exodus редко активируется, сломанный путь оставался незамеченным... в течение месяцев.
8/ Вот что должно было вызвать тревогу: • Активация режима Exodus после длительного бездействия • Десятки запросов на вывод средств происходят одновременно • Внезапный скачок в изменениях балансаToWithdraw Все это было видно и могло быть остановлено с помощью мониторинга в реальном времени на блокчейне.
9/ Итак, какой урок? • Код экстренной ситуации все еще является производственным кодом • Резервные пути не помогают, если они не работают • Мониторинг в реальном времени не является опциональным, это критически важно для выживания
Показать оригинал
28,28 тыс.
328
Содержание этой страницы предоставляется третьими сторонами. OKX не является автором цитируемых статей и не имеет на них авторских прав, если не указано иное. Материалы предоставляются исключительно в информационных целях и не отражают мнения OKX. Материалы не являются инвестиционным советом и призывом к покупке или продаже цифровых активов. Раздел использует ИИ для создания обзоров и кратких содержаний предоставленных материалов. Обратите внимание, что информация, сгенерированная ИИ, может быть неточной и непоследовательной. Для получения полной информации изучите соответствующую оригинальную статью. OKX не несет ответственности за материалы, содержащиеся на сторонних сайтах. Цифровые активы, в том числе стейблкоины и NFT, подвержены высокому риску, а их стоимость может сильно колебаться. Перед торговлей и покупкой цифровых активов оцените ваше финансовое состояние и принимайте только взвешенные решения.