
3 июля 2026 года злоумышленник нашёл способ заставить Hinkal Protocol — систему для приватных переводов стейблкоинов — выдать ему $800 тыс., внеся при этом значительно меньшую сумму. Ключом стала особая операция без криптографического доказательства, которая обманула внутренний учёт контракта.
Введение
Hinkal Protocol — это протокол приватности на Ethereum. Его задача — позволять пользователям делать переводы стейблкоинов так, чтобы снаружи не было видно, кто, кому и сколько отправил. Для этого используются криптографические доказательства (proof) — математические конструкции, которые подтверждают, что операция законна, не раскрывая деталей.
В протоколе существует особый режим — Proofless Deposit, то есть депозит без такого доказательства. Это не обязательно плохо само по себе, но подобная операция требует особенно строгих проверок: раз нет криптографического подтверждения, контракт должен особенно тщательно следить за тем, что именно происходит с балансами.
Именно в этих проверках и обнаружилась уязвимость.
Ход инцидента
1️⃣ Первые небольшие выводы. Злоумышленник начал с серии небольших выводов по 1 000 USDC через функцию Transact — стандартную функцию вывода средств из протокола. Это могло быть как прощупыванием системы, так и частью подготовки к основному действию.
2️⃣ Ключевой депозит-триггер. Затем атакующий совершил один крупный Proofless Deposit на 25 000 USDC прямо на адрес контракта Hinkal. Этот депозит стал триггером: из-за ошибки в логике проверки контракт начислил злоумышленнику внутри системы сумму, значительно превышающую реально внесённые 25 000 USDC.
3️⃣ Вывод средств. Получив завышенный внутренний баланс, злоумышленник вывел через функцию Transact около $800 тыс. в USDC — деньги других пользователей протокола.
Почему это стало возможным
Суть ошибки — в недостаточной проверке при Proofless Deposit. В нормально работающей системе внутренний баланс пользователя должен строго соответствовать тому, что он реально внёс. Любое несоответствие — сигнал тревоги.
Здесь контракт не защитился от ситуации, когда один депозит без доказательства мог повлиять на внутренний учёт суммой, несоразмерной реальному вкладу. Фактически отсутствовала либо защита от повторного использования данных (replay protection), либо корректная сверка состояния между моментом депозита и моментом вывода.
Протоколы приватности особенно чувствительны к таким ошибкам: механизм скрытия данных, который защищает транзакции от внешних наблюдателей, не должен при этом скрывать их от самого контракта при проверке балансов.
Детали расследования: движение средств
Сеть Ethereum
После вывода ~$800 тыс. в USDC средства были обменяны на WETH через Uniswap, затем конвертированы в ETH. Почти вся сумма — около $720 тыс. — была направлена в миксер Tornado Cash. Оставшиеся ~$80 тыс. переведены через протокол THORChain — децентрализованный сервис для обмена активов между разными блокчейнами — и конвертированы в Bitcoin.
Сеть Bitcoin
На адрес bc1qr2sfkehuqgr0sp87sp25uzw79242523l26zn3w поступило ~1,2 BTC. Далее средства разделились на два потока:
— 0,2 BTC отправлены на адрес bc1qu8yp6pss8ru9thz9k5yjghh9r7l5s37ej9d4y3, откуда через цепочку адресов пришли на bc1qykdtfhg9gna0w2ckqdahesqesrhadqqewfeqat
— 1 BTC отправлен на адрес bc1qkk5rhx7qhgf9epdupuf5dpppldgxt80gjd2qjt, откуда через цепочку адресов пришли на bc1qkch9ahfyavjk48hd6tktv84w9mgzghqdklz85r
На момент расследования средства остаются на адресах bc1qu8yp6pss8ru9thz9k5yjghh9r7l5s37ej9d4y3 и bc1qkch9ahfyavjk48hd6tktv84w9mgzghqdklz85r без движения.
Заключение
Атака на Hinkal Protocol обнажила парадокс: протокол, созданный для обеспечения приватности пользователей, оказался недостаточно строгим в проверке собственных внутренних операций. Один депозит без криптографического доказательства — и контракт выдал злоумышленнику в десятки раз больше, чем тот внёс.
Большая часть средств уже скрыта через Tornado Cash и THORChain. Оставшиеся BTC на известных адресах команда «КоинКит» продолжает отслеживать.


