
2 августа 2026 года в один день два протокола на BNB Smart Chain потеряли суммарно около $1,59 млн. В LpdFi злоумышленник временно поднял цену токена через мгновенный кредит и получил выплату дохода, рассчитанного по искусственно завышенной цене. В MOKE достаточно было просто вызвать публичную функцию четыре раза — и из резервов протокола ушло 166 млн токенов. Разные механики, одинаковый итог: системы доверяли тому, что не следовало принимать без проверки.
LpdFi: протокол посчитал доход по завышенной цене — и заплатил $690 тыс. из собственной ликвидности
Дата: 2 августа 2026 | Сеть: BNB Smart Chain | Ущерб: ~$690 тыс.
Транзакция: 0x70bbe0aa3c7ef149ecb6128a06025885deaa8fef3f393a505d447d28ab3315d6
Что произошло
LpdFi — протокол на BNB Smart Chain, выплачивающий пользователям доход на основе стоимости их позиций в токене LPD. Чем дороже стоит LPD — тем больший доход рассчитывается. Цену LPD протокол брал напрямую из одного пула на PancakeSwap: смотрел на соотношение токенов в пуле LPD/USDC и считал это рыночной ценой.
Злоумышленник воспользовался именно этим.
1️⃣ Флэш-лоан и скупка LPD. Атакующий взял мгновенный кредит — флэш-лоан, который берётся и возвращается в одной транзакции без залога — и на заёмные средства скупил большой объём LPD в пуле PancakeSwap. Резкая скупка изменила соотношение токенов в пуле: LPD стало меньше, USDC больше — и цена LPD по формуле пула мгновенно выросла.
2️⃣ Запрос дохода по завышенной цене. Пока цена была искусственно раздута, злоумышленник вызвал функцию claimInterest() — запрос выплаты накопленного дохода. Протокол рассчитал доход по текущей (завышенной) цене LPD и решил, что должен выплатить крупную сумму.
3️⃣ Выплата за счёт собственной ликвидности. Чтобы выплатить начисленный доход, протокол начал выводить собственную ликвидность из пула LPD/USDC. Злоумышленник получил около $690 тыс. в USDC — из кармана самого протокола.
Почему стало возможным
Протокол использовал спотовую цену — текущую цену в конкретном пуле в конкретную секунду. Такая цена уязвима: крупная покупка или продажа может изменить её на короткое время. Правильная защита — TWAP: цена, усреднённая за период времени (например, за 30 минут). Мгновенная манипуляция не влияет на среднее за полчаса, и атака теряет смысл. Здесь TWAP не использовался. Дополнительно функция выплаты дохода могла напрямую забирать ликвидность из пула — то есть ошибочно рассчитанный доход оплачивался реальными резервами протокола.
Движение средств
~$690 тыс. USDC поступили на адрес злоумышленника 0x5d289266d85EF671561bA3F253FB79327C193f33, были переведены на адрес 0xa16f5ba49954C5ed6273CF8578586bE4344F8968, обменяны через Relay на BNB и частями отправлены в миксер Tornado Cash. На момент расследования средства выведены через миксер.
MOKE: функцию выдачи токенов мог вызвать кто угодно — четыре вызова обошлись протоколу в $900 тыс.
Дата: 2 августа 2026 | Сеть: BNB Smart Chain | Ущерб: ~$900 тыс.
Транзакция: 0x0776048b1b58064fb31b6513721811e7b44d6bdbe7bf5833158b241ca6756a8f
Что произошло
В контракте, связанном с токеном MOKE, существовала публичная функция claim(). Публичная — означает, что её мог вызвать любой адрес в блокчейне без какой-либо проверки прав. Каждый вызов передавал около 41,68 млн токенов MOKE из внутренних резервов протокола на адрес вызывающего. Никаких условий, никакого подтверждения прав — просто открытая раздача.
Злоумышленник вызвал эту функцию четыре раза подряд — и получил около 166 млн токенов MOKE.
Для превращения токенов в реальные деньги атакующий выстроил сложную цепочку операций в одной транзакции: взял флэш-лоаны WBNB и BTCB через Lista DAO (Moolah) — то есть мгновенные кредиты без залога — задействовал кредитное плечо через платформу Venus, удалил ликвидность из заранее подготовленного пула и провёл цикл распределения и получения дивидендов через подконтрольные адреса. В результате 166 млн MOKE были конвертированы в WBNB — примерно $900 тыс.
Также стоит отметить: атакующий адрес 0xE454a9BAC1a44868e4A9Cbe1a4B5ac231D0DCF8a использовал EIP-7702 self-delegation — механизм, позволяющий обычному кошельку временно работать как смарт-контракт. Это технически продвинутый инструмент, указывающий на высокую квалификацию атакующего.
Почему стало возможным
Причина предельно проста: функция claim() не содержала никакой проверки прав. В корректно написанном контракте подобная функция должна проверять — является ли вызывающий адрес авторизованным получателем, какова его доля, не превышен ли лимит. Здесь не было ни одной из этих проверок. Это одна из самых базовых ошибок в разработке смарт-контрактов — отсутствие контроля доступа к функциям, управляющим реальными активами.
Движение средств
После конвертации ~900 тыс. в WBNB средства с адреса злоумышленника 0xE454a9BAC1a44868e4A9Cbe1a4B5ac231D0DCF8a были обменяны на BNB и через несколько транзитных адресов и PancakeSwap поступили на адрес 0x8d9ddf0ab2e3e3Ff450aac7773dEEBc27c7aEA1C. На момент расследования средства остаются на этом адресе без движения.
Заключение
Два инцидента в один день — два разных урока об одном и том же: о доверии без проверки.
LpdFi доверял спотовой цене, не задаваясь вопросом, не была ли она только что искусственно изменена. MOKE имел публичную функцию выдачи токенов, не задаваясь вопросом, имеет ли вызывающий на это право.
В первом случае защита стоила бы одной строчки: использовать TWAP вместо спотовой цены. Во втором — одной строчки другого рода: добавить проверку прав перед выдачей токенов. Два упущения — $1,59 млн ущерба.
Средства LpdFi выведены через Tornado Cash. Средства MOKE остаются на известном адресе без движения. Команда «КоинКит» продолжает отслеживать ситуацию.


