Система приняла поддельные доказательства за настоящие — и отдала $2,2 млн из законсервированного контракта Aztec
15.06.2026 | CoinKyt Company

14 июня 2026 года злоумышленник воспользовался логической ошибкой в старом, давно выведенном из эксплуатации контракте Aztec Connect. Он подсунул системе специально подготовленные данные — и та сама отдала ему ETH и несколько других токенов на сумму около $2,2 млн. Никаких административных ключей, никакого взлома сервера. Просто ошибка в логике давно забытого кода.

 


Введение


Aztec Connect — это старый продукт компании Aztec Labs, позволявший проводить приватные транзакции в сети Ethereum. Он давно выведен из эксплуатации: команда перешла на новую L2-сеть (L2 — это «второй слой», отдельная сеть поверх Ethereum, которая работает быстрее и дешевле). Но, как и в случае с другими подобными инцидентами, вывод продукта из эксплуатации не означает исчезновения контракта из блокчейна. Контракт продолжал существовать — и в нём хранились активы.


Aztec Foundation подтвердила инцидент и уточнила: текущая сеть Aztec и токен AZTEC ERC-20 к произошедшему не имеют отношения. Пострадал только старый законсервированный контракт.

 


Ход инцидента


Чтобы понять, что произошло, нужно разобраться в том, как работала система Aztec Connect.


Aztec Connect использовал технологию ZK-rollup. Это способ обрабатывать много транзакций сразу: они собираются в один пакет (rollup), и вместо того чтобы проверять каждую транзакцию отдельно, система проверяет одно математическое доказательство — ZK-proof. Если доказательство верное, Ethereum принимает весь пакет как корректный.


Проблема была в том, что проверка доказательства и фактическое зачисление или списание активов работали не полностью синхронно.


1️⃣ Поддельные данные внутри пакета. Злоумышленник подготовил специальный rollup-пакет с подложными данными. Внутри части пакетов он указал параметр numRealTxs = 1 — то есть «в этом пакете одна реальная транзакция». Из-за этого система при обработке на уровне Ethereum смотрела только на первую транзакцию в пакете, а всё остальное фактически игнорировала.


2️⃣ Расхождение между доказательством и реальностью. Математическое ZK-доказательство система приняла как корректное. Но то, что доказательство прошло проверку, не означало, что реальные активы действительно были внесены в систему в нужном объёме. Проверка и фактическое движение активов оказались рассинхронизированы.


3️⃣ Необеспеченные балансы. В результате в состоянии контракта появились балансы, под которыми не было реальных активов. Система считала, что деньги есть и их можно выводить — хотя соответствующая корректная обработка на уровне Ethereum фактически не была выполнена.


4️⃣ Вывод активов. Через вспомогательный контракт 0x06f585F74e0DA633Ae813A0f23Fb9900B61d0fcD злоумышленник провёл серию выводов и забрал из контракта ETH, DAI, wstETH, yvDAI, yvWETH, LUSD и yvLUSD.

 


Почему это стало возможным


Логическая ошибка находилась в контракте RollupProcessorV3 — старой версии обработчика rollup-пакетов. Параметр numRealTxs позволял злоумышленнику управлять тем, сколько транзакций из пакета система реально обрабатывала на уровне Ethereum. Остальные транзакции при этом как бы «проскальзывали» мимо полноценной проверки, но состояние контракта обновлялось так, будто они были учтены.


Это создало расхождение между тем, что система считала правдой, и тем, что реально произошло. Злоумышленник воспользовался этим расхождением, чтобы получить право на вывод активов, которые ему не принадлежали.


Важный момент: Aztec Labs заявила, что у команды не было никаких административных ключей, чтобы остановить, обновить или заморозить контракт. То есть даже если бы атаку заметили в реальном времени — вмешаться было бы невозможно. Это обратная сторона децентрализации: код работает автономно, и если в нём ошибка — никто не может нажать кнопку «стоп».

 


Детали расследования: движение средств


Злоумышленник действовал с адреса 0x0F18D8b44a740272f0be4d08338d2b165b7EdD17, используя вспомогательный контракт 0x06f585F74e0DA633Ae813A0f23Fb9900B61d0fcD.


Через основную транзакцию 0x074ec9317d8336db37e8c348fbdd7515573ff4088239c77ab429f522509aeeb1 из контракта Aztec Connect были выведены ETH, DAI, wstETH, yvDAI, yvWETH, LUSD и yvLUSD.


На момент расследования все похищенные активы остаются на адресе злоумышленника 0x0F18D8b44a740272f0be4d08338d2b165b7EdD17 без движения.

 


Заключение


Атака на Aztec Connect — ещё одно напоминание о том, что «выведен из эксплуатации» и «безопасен» — не одно и то же. Старый контракт с логической ошибкой годами хранил чужие активы, и никто не мог ни обновить его, ни заморозить.


Злоумышленник не взламывал серверы и не подбирал пароли. Он просто нашёл расхождение между тем, что система считала правдой, и тем, что происходило на самом деле — и воспользовался им.


Примечательно, что похищенные $2,2 млн по-прежнему лежат на адресе атакующего нетронутыми. Команда «КоинКит» продолжает отслеживать движение средств.