Одна подпись и ошибка округления: два инцидента на $2 млн за один день
18.03.2026 | CoinKyt Company

17 марта 2026 года в сети Ethereum зафиксированы два инцидента с суммарным ущербом около $2.01 млн. Природа у них разная: один — классический фишинг, второй — тонкая ошибка в математике протокола. Объединяет их то, что атакующему не потребовалось взламывать инфраструктуру.



Фишинг Permit — $1.76 млн


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


TX: 0xfd7417af8433e3d9bcbed3f965307c800a24eb4e98f42cebfab6ca6064f5a642


Пользователь подписал вредоносный Permit — стандартный механизм одобрения расходования токенов без отдельной on-chain транзакции. После получения подписи злоумышленник немедленно списал около $1.76 млн в USDC, распределив похищенные средства по трём адресам.


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


Похищенные USDC были обменяны на ETH на всех трёх адресах.

- Адрес 0x6fE314fD4CF845f35fc461eD98e2FB8d9356B566 — 88,315 USDC, конвертированы в ETH, остаются на балансе.

- Адрес 0xf1A50bbebA19a85dB20432c6c201aa89604dfd2B — 264,946 USDC, конвертированы в ETH, остаются на балансе.

-Адрес 0x9F6f1ac48E4c7E53495A99ce49974Cd1914fE17E — около $1.4 млн USDC, конвертированы в ETH через NEAR Intents, далее средства разошлись ещё по трём адресам, где остаются на момент расследования.

 


dTRINITY dLEND — $254k


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


TX: 0xbec4c8ae19c44990984fd41dc7dd1c9a22894adccf31ca6b61b5aa084fc33260


Атакующий получил flash loan из Morpho и зашёл в dTRINITY dLEND — протокол, где под залог cbBTC и других активов можно занимать dUSD. Далее он многократно выполнял операции deposit и withdraw с dcbBTC aToken. При каждом цикле протокол списывал слишком мало внутренних долей, но отдавал больше реального cbBTC, чем должен.

После накопленного дисбаланса атакующий занял dUSD под оставшийся «на бумаге» залог, а резерв cbBTC оказался недообеспечен. На адрес 0x08CfDfF8DEd5f1326628077F38D4f90DF6417fD9 поступило 257,328.63 dUSD, которые были конвертированы в ETH.


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


Причина — ошибка округления в dcbBTC aToken. При операциях mint и burn протокол конвертировал суммы в scaled units через функцию rayDiv с округлением half-up. При определённых значениях liquidityIndex меньший депозит и более крупный вывод могли округляться к одному и тому же числу долей. В итоге при каждом выводе атакующий сжигал слишком мало долей и извлекал из резерва больше cbBTC, чем позволял честный баланс.

Flash loan и полностью публичные функции deposit, borrow и withdraw позволили провести всю атаку в одной транзакции.


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


После конвертации dUSD в ETH большая часть средств ушла в миксер Tornado Cash, меньшая часть — на обменник FixedFloat.

 

Заключение


Наиболее уязвимыми точками нередко оказываются не core-контракты, а детали реализации. Алгоритм округления в одном случае и доверие пользователя к подписываемому разрешению — в другом.


Подпись Permit не требует подтверждения on-chain транзакции и на первый взгляд выглядит безобидно. Ошибка округления в rayDiv не бросается в глаза при аудите. Оба вектора эксплуатируются именно потому, что остаются вне зоны основного внимания.

Команда КоинКит продолжает мониторинг адресов, связанных с инцидентами.