Привилегированный ключ, один NFT и ошибка в burn: три инцидента на $25.8 млн
26.03.2026 | CoinKyt Company

22–24 марта 2026 года в сетях Ethereum, BNB Smart Chain и Optimism зафиксированы три инцидента с суммарным ущербом около $25.8 млн. Все три различны по природе уязвимостей: компрометация привилегированного ключа, ошибка в burn-механике и двойной учёт залога.

 


Resolv — $25 млн


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


Дата: 22 марта 2026. Сеть: Ethereum.


Злоумышленник получил доступ к привилегированному сервисному ключу Resolv и через штатную функцию completeSwap() выпустил ~80 млн необеспеченных USR. После этого USR был быстро продан на рынке. Реально вывести удалось около $25 млн — остальное осталось в пулах и после падения цены USR потеряло стоимость.


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


Функция completeSwap() проверяла только минимальную сумму выдачи, но не ограничивала максимальный объём выпуска. При компрометации такого ключа это означало полное отсутствие ограничений на выпуск. Resolv заявил, что базовое обеспечение не похищалось напрямую: проблема была именно в механике выпуска.


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


Атакующий обменивал wstUSR на стейблкоины, затем на ETH, чередуя операции через различные DEX-пулы и мосты. На адресе 0x8ED8cF0C1c531C1b20848E78f1CB32fa5B99b81C на момент расследования находится ~11 400 ETH.

 


BCE/BSC-USD — $680 тыс


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


Дата: 23 марта 2026. Сеть: BNB Smart Chain.


TX: 0x85ac5d15f16d49ae08f90ab0e554ebfcb145712342c5b7704e305d602146d452


Злоумышленник привлёк ликвидность через Moolah и Venus и провёл серию операций с BCE и пулом BCE/BSC-USD на PancakeSwap. Используя ошибку в burn-механике BCE, он сжёг BCE прямо с адреса пула и вызвал sync(), резко сократив резерв BCE и исказив цену в пуле. Из пула выведено ~800,000 BSC-USD, после погашения ликвидности на адрес атакующего ушло ~$680 тыс.


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


Проблема была в логике токена BCE. При продаже в пул контракт накапливал scheduledDestruction — отложенное значение, которое при следующем обычном переводе могло списать сумму с адреса LP-пары и сразу вызвать sync(). Таким образом, обычный перевод BCE позволял принудительно уменьшить баланс BCE в пуле и зафиксировать перекос в резервах.


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


Средства поступили на адрес 0x9f7EABD7C3538bA6B9D10Eede63712c0EccE6D69, затем на 0x497ac8a4A17ae6eeE7beb47BdF96e3a9aDaC8a2C. Через Across Protocol переброшены в Ethereum в виде USDT, затем конвертированы в DAI и остаются на балансе.

 


opUSDI — $45 тыс


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


Дата: 24 марта 2026. Сеть: Optimism.


TX: 0x18e34ce214211afedb6008c0cd00d476ce71222643521dbff5e2b65cdb2ccb80


Злоумышленник один раз внёс Uniswap V3 NFT как залог, но из-за ошибки протокол начал учитывать его несколько раз. Это позволило занять больше средств, чем реально было обеспечено, и вывести 44,218.39 USDC + 7,019.93 USDC.e из резервов протокола.


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


Ошибка была в логике учёта залога. В Univ3CollateralToken при депозите NFT записывался по адресу владельца vault через add_to_list(vault.minter(), tokenId). При этом balanceOf(vault) тоже смотрел не на конкретный vault, а на адрес minter, суммируя все его позиции. Из-за этого один и тот же NFT мог учитываться как залог больше одного раза.


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


Средства были переброшены через Across Protocol в Ethereum на адрес 0x1020C949C1c8658cEf8e473dbD3631AfE68C1938, оттуда переведены на 0xfE7735f76a68e5a19C52bCc47e4c300c58DADD55, где остаются на балансе.

 


Заключение


Три инцидента за два дня демонстрируют разные векторы атак: удар по ключевой инфраструктуре, логическая ошибка в токеномике и двойной учёт залога. Объединяет их одно: во всех трёх случаях протоколы работали штатно, но разразрешали больше, чем должны были.


Особняком стоит кейс Resolv: ~11 400 ETH всё ещё находятся на адресе злоумышленника.


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