Как один злоумышленник обманул сразу два протокола и украл
26.06.2026 | CoinKyt Company

25 июня 2026 года один злоумышленник провёл две атаки на два разных протокола в двух разных сетях — и в обоих случаях воспользовался тем, что контракты верили данным, которые следовало проверять строже. Суммарный ущерб составил около $24 тыс.

 


Введение


Lixir Finance — протокол управления ликвидностью на Ethereum, где пользователи вносят активы в vault-контракты (хранилища) и получают взамен vault-токены — своеобразные «квитанции», подтверждающие долю в хранилище. Ocean Protocol — децентрализованный рынок данных, работающий в том числе на Polygon, с пулами ликвидности на базе механизма BPool. Несмотря на совершенно разную природу проектов, атакующий нашёл слабое место в каждом из них.

 


Lixir Finance: поддельное разрешение от чужого имени


Сеть:
Ethereum


Транзакция: 0x17026faca0b8e4cb7531e4fb277c390eb165e81229628e0192923ad1d90a41da


Что произошло


В Ethereum есть стандарт EIP-2612, который позволяет давать разрешения на управление токенами через подпись — без отдельной on-chain транзакции. Это удобно: вместо того чтобы сначала отправить транзакцию «разрешаю», а потом транзакцию «выполни», можно подписать сообщение один раз и передать подпись сразу вместе с действием.


Подпись работает так: контракт восстанавливает из неё адрес — и это должен быть именно адрес владельца токенов. Только тогда разрешение считается легитимным.


Контракт Lixir 0xEFd1b12F5E3c35D7daE0D1449674C247566f9b76 допустил критическую ошибку: он проверял, что подпись восстанавливает какой-то ненулевой адрес — но не проверял, что этот адрес совпадает с адресом реального владельца токенов. Это всё равно что охранник проверяет, что у вас есть хоть какой-нибудь пропуск — но не смотрит, ваша ли на нём фотография.


Воспользовавшись этим, злоумышленник смог выставить разрешения на vault-токены от имени множества чужих адресов. Получив разрешения, он использовал чужие vault-токены для выхода из позиций — то есть предъявил чужие «квитанции» и забрал базовые активы.


В результате с Lixir были выведены: ~4 477 USDC, ~3 609 USDT, 2,58 ETH и ~24 182 токена LIX.

 


Ocean Protocol: манипуляция внутренним балансом пула


Сеть:
Polygon


Транзакция: 0x6dc8a7fba1303faef3ec7afa770b90b17ec5ecd73b51229277a9b0492e285796


Что произошло


Пулы BPool в Ocean Protocol хранят два числа: фактический баланс токенов (реальное количество токенов на контракте) и внутренний резерв (то, что пул «считает» своим балансом для расчёта обменных курсов). В норме эти числа совпадают. Есть специальная функция gulp, которая принудительно синхронизирует их: берёт фактический баланс и записывает его как внутренний резерв.


Злоумышленник использовал эту функцию как инструмент манипуляции. Схема выглядела так:


1️⃣ Войти в пул — внести токены mOCEAN (версия токена OCEAN на Polygon).


2️⃣ Изменить фактический баланс токенов на контракте.


3️⃣ Вызвать gulp — заставить пул принять изменённый баланс как официальный внутренний резерв.


4️⃣ Выйти из пула — получить активы по выгодному расчёту, основанному на уже искажённых данных.


Повторяя эту последовательность (LOG_JOINGulpedLOG_EXIT) несколько раз, злоумышленник каждый раз получал чуть больше, чем вносил.

 


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


Функция gulp по задумке — служебный инструмент для синхронизации данных. Но она не проверяет, кто и зачем её вызывает, и не защищена от вызова в середине цепочки операций. Это позволило злоумышленнику намеренно создать расхождение между реальным и «официальным» балансом, а затем принудительно его «исправить» в нужный момент — когда это давало максимальную выгоду при выходе из пула.

 


Движение средств


Оба инцидента связаны одним адресом злоумышленника: 0x3Fa8cF7FeA68C8E76A9838d77889464DdFb6a6cf


Lixir Finance (Ethereum):
все полученные токены были обменяны на ETH и отправлены в миксер Tornado Cash.


Ocean Protocol (Polygon):
токены OCEAN были переброшены в сеть Ethereum на тот же адрес злоумышленника, обменяны на ETH и также отправлены в Tornado Cash.


На момент расследования средства выведены через миксер, дальнейшее отслеживание существенно затруднено.

 


Заключение


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


В Lixir контракт верил любой подписи, не убеждаясь, что она принадлежит владельцу. В Ocean функция синхронизации баланса была доступна всем и в любой момент — что и позволило использовать её как рычаг для манипуляции.


Суммарный ущерб относительно невелик — около $24 тыс. Но оба случая наглядно показывают: даже небольшая небрежность в проверках может открыть дверь для атаки.


Команда «КоинКит» продолжает мониторинг адресов злоумышленника.