
13 июля 2026 года злоумышленник воспользовался тем, что смарт-аккаунты Lumi Finance путали «проверку операции» и «выдачу разрешений». В момент, когда кошельки должны были просто убедиться, что транзакция корректна, они заодно открывали доступ к своим токенам — и пользователи об этом даже не подозревали.
Введение
Чтобы понять эту атаку, нужно разобраться в двух концепциях.
Смарт-аккаунт — это кошелёк на основе смарт-контракта. В отличие от обычного крипто-кошелька, смарт-аккаунт может выполнять сложную логику: проверять условия, выполнять несколько действий за раз, поддерживать восстановление доступа. Lumi Finance использовала именно такие кошельки.
UserOperation — это стандартный формат операций для смарт-аккаунтов (стандарт ERC-4337). Когда пользователь хочет что-то сделать, он создаёт UserOperation — своеобразный «конверт» с описанием действия. Перед исполнением система проверяет этот конверт: убеждается, что операция законна, что у пользователя есть права, что всё в порядке. Проверка — это только проверка, она не должна менять состояние системы или выдавать какие-либо разрешения.
Именно это разграничение в Lumi Finance было нарушено.
Ход инцидента
1️⃣ Специально подготовленные операции. Злоумышленник с адреса 0xce1a3bb0b98d0d90c7dd0620ab86c9a771888d88 через вредоносный контракт 0x56362412ae17cac443aafbab4289946ad958e8a1 отправил специально сформированные UserOperation на несколько смарт-аккаунтов Lumi Finance.
2️⃣ Разрешения в момент проверки. Из-за ошибки в логике валидации кошельки Lumi не просто проверяли входящую операцию — они одновременно выдавали вредоносному контракту разрешение (approve) на списание своих ERC-20 токенов. Это происходило незаметно для пользователей: внешне всё выглядело как обычная проверка входящего запроса.
3️⃣ Списание токенов. Получив разрешения сразу с нескольких кошельков, вредоносный контракт списал токены LUAUSD и LUA и собрал их у себя, после чего перевёл на адрес злоумышленника.
Почему это стало возможным
По стандарту ERC-4337 фаза проверки UserOperation должна быть строго отделена от фазы исполнения. Проверка — это только проверка: она не должна изменять состояние контракта, выдавать разрешения или проводить какие-либо операции с токенами.
В смарт-контрактах Lumi Finance эта граница была размыта. Логика валидации допускала, что во время проверки операции кошелёк мог выполнять действия, которые по стандарту разрешены только на этапе исполнения. Злоумышленник подобрал такие UserOperation, которые заставляли кошельки делать именно это — выдавать разрешения в момент, когда система «думала», что просто проверяет запрос.
По сути, входная дверь была устроена так, что её осмотр автоматически выдавал гостю ключ от квартиры.
Детали расследования: движение средств
На адрес злоумышленника 0xCe1a3BB0b98D0D90C7Dd0620Ab86C9A771888d88 поступило около $264 тыс. в токенах LUAUSD и LUA. Средства разделились на три потока.
Первый поток (~$40 тыс.): токены были конвертированы в ~22 ETH на том же адресе злоумышленника. Из них:
— 12 ETH отправлены в миксер Tornado Cash
— 7 ETH переведены на обменник FixedFloat — площадку для быстрого обмена криптовалют без верификации
— 3 ETH остаются на адресе злоумышленника на момент расследования
Второй поток (~$34 тыс.): средства переведены на адрес 0x1deEFf057F33053d159C8aB173c7D88A655a478E, после чего переброшены через мост Wormhole — протокол для перевода активов между разными блокчейнами — через цепочку промежуточных адресов. В итоге средства оказались на контракте Chainlink 0xD27F88501e62D0BDc70B20d6ed06d8E0fF8c3812, где на момент расследования и остаются.
Третий поток: оставшиеся средства в виде токенов LUAUSD и LUA остаются на адресе злоумышленника без движения.
Заключение
Атака на Lumi Finance показывает риск, который возникает при несоблюдении базовых принципов архитектуры смарт-аккаунтов. Проверка операции и её исполнение — это два принципиально разных этапа с принципиально разными правами. Когда эта граница стирается, злоумышленник получает возможность получить разрешения на чужие токены в момент, когда пользователи даже не подозревают, что что-то происходит.
Часть средств уже скрыта через Tornado Cash и FixedFloat, другая часть застыла на контракте Chainlink. Команда «КоинКит» продолжает отслеживать движение оставшихся активов.


