Оценка безопасности HTLC Garden на Move: Zellic

Оценка безопасности HTLC Garden на Move: Zellic

Технические

// Технические
TL;DR, Zellic проверила контракт HTLC на базе Move от Garden в сети Sui, сосредоточившись на корректности переходов состояний, целостности переводов, уникальности ордеров и подлинности досрочных возвратов. Были выявлены две находки, одна Medium и одна Informational, и обе устранены в коде. 

Введение

Garden привлекла Zellic для проведения оценки безопасности реализации HTLC на базе Move, развёрнутой в сети Sui. Проверку провели Sunwoo Hwang и Varun Verma в мае 2025 года, отчёт был передан в июне 2025 года.

Оценка охватывала файл sources/main.move в репозитории htlc-sui; единственный модуль, реализующий логику атомарных свопов Garden в сети Sui на языке Move. Zellic исследовала контракт как вручную, так и с помощью автоматизированных инструментов, охватывая ошибки кодирования, ошибки бизнес-логики, риски интеграции и зрелость кода.

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

Область проверки

Оценка охватывала:

  • sources/main.move: модуль на языке Move, реализующий атомарные свопы на основе HTLC в сети Sui, включая инициацию ордера, погашение, стандартный возврат и мгновенный возврат с проверкой подписи Ed25519

Цели оценки Zellic были сформулированы в виде четырёх конкретных вопросов безопасности: перемещаются ли средства только при корректных переходах состояний; обеспечивается ли целостность переводов при том, что все потоки монет жёстко зафиксированы на адресах initiator или redeemer; обеспечивается ли уникальность ордеров для предотвращения дублирующихся или воспроизведённых ордеров; и требуют ли досрочные возвраты действительной подписи Ed25519 от законного redeemer.

Находки

Zellic выявила две находки. Одну уровня Medium, одну Informational. Проблем уровня Critical, High или Low выявлено не было.

Находка 3.1; Отказ в обслуживании через дублирование ордера за счёт фронтраннинга детерминированного order_id | Medium

order_id вычисляется как sha256(secret_hash || initiator || redeemer || timelock). Все четыре входных значения видны в calldata ожидающей транзакции любому наблюдателю мемпула. Кроме того, функция initiate_on_behalf позволяет любому адресу передать те же четыре значения, не подтверждая владение адресом initiator.

Злоумышленник может скопировать четыре поля из ожидающей транзакции свопа жертвы и отправить initiate_on_behalf с идентичным набором полей и amount = 1. Если его транзакция подтвердится первой, реестр сохранит пылевой ордер под этим order_id, и последующая транзакция жертвы прервётся с ошибкой EDuplicateOrder.

Практическая поверхность атаки — периоды высокой волатильности: злоумышленник, отслеживающий в мемпуле HTLCs, исполняющие арбитраж, может заблокировать своп конкурента при ничтожных затратах, пылевом депозите в 1 единицу, и сам воспользоваться арбитражной возможностью. Вероятность и влияние оценены как Medium.

Находка 3.2; Неограниченный таймлок допускает случайную безвозвратную блокировку | Informational

Контракт корректно применяет истечение срока как initiated_at + timelock < now, однако сам таймлок не имеет максимального значения. Пользователь может случайно передать чрезвычайно большое число, например u256::MAX. Это риск для пользовательского опыта и безопасности, а не эксплуатируемая уязвимость; злоумышленного сценария здесь нет, поскольку пользователь заблокировал бы собственные средства.

Действие

Обе находки были подтверждены Garden и устранены в коде.

  • Находка 3.1 исправлена в коммите e85e06c9: значение amount добавлено в формирование прообраза order_id, что исключает инициацию на пылевую сумму и делает фронтраннинг неосуществимым.
  • Находка 3.2 исправлена в коммите 4b9c871f: на таймлок в safe_params наложено максимальное ограничение с разумным верхним пределом, чтобы предотвратить случайные безвозвратные блокировки.

Резюме

Две находки: одна Medium, одна Informational, обе устранены в коде. Проблем уровня Critical, High или Low нет. В заключительной оценке Zellic подтвердила, что основная логика свопов чиста и что фундаментальные свойства безопасности контракта, корректные переходы состояний, целостность переводов, уникальность ордеров и аутентифицированные досрочные возвраты, признаны надёжными.

Garden рассматривает безопасность как постоянную инициативу и проводит открытые конкурсные баг-баунти, такие как недавний аудит Code4rena, в котором было предложено $37,500 вознаграждений за 813 заявок и который был направлен на архитектуру HTLC в EVM, Solana, Sui и Starknet. Информацию обо всех аудитах можно найти на https://garden.finance/ru/security

Смотреть полный отчёт Zellic на GitHub →

Last updated

Related Blogs