Аудит безопасности Garden HTLC Swapper: OtterSec

Аудит безопасности Garden HTLC Swapper: OtterSec

Технические

// Технические
.TL;DR, OtterSec проверила контракты HTLC swapper от Garden в реализациях на EVM и на Bitcoin script. Было выявлено две находки уровня informational; первое — несогласованная семантика истечения срока в разных блокчейнах, которая была исправлена. Второе отмечало, что заблокированные средства оставались доступными для погашения после истечения срока контракта; команда намеренно сохранила это поведение.

Garden привлекла OtterSec для проведения внешней оценки безопасности программы swapper; основного контракта, реализующего кросс-чейн функциональность атомарных свопов Garden. Аудит охватил как EVM-контракты, так и реализацию Hash Time Lock Contract на Bitcoin script.

HTLCs — это криптографический примитив, благодаря которому работает архитектура Garden. Каждый своп представляет собой отдельный HTLC: средства блокируются хеш-условием и временным окном. Контрагент может забрать их, предъявив правильный секретный прообраз, либо инициатор возвращает их после истечения срока. Здесь нет ни контракта моста, ни объединённой ликвидности, ни кастодиана. Корректность реализации HTLC и есть модель безопасности протокола, что делает её правильной отправной точкой для программы безопасности.

Область аудита

Аудит был проведён в августе 2023 года. Команда OtterSec; Nicholas R. Putra, Woosun Song и Robert Chen, проверила репозиторий swapper.

В область аудита вошли два компонента:

  • contracts/AtomicSwap.sol: реализация на Solidity со стороны Ethereum, охватывающая инициацию средств, погашение по секрету и логику возврата средств по истечении срока
  • bitcoin/AtomicSwap.ts: реализация на Bitcoin script, использующая OP_CHECKSEQUENCEVERIFY для выходов с таймлоком

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

Находки

OS-CTL-SUG-00; Несогласованная семантика истечения срока в разных блокчейнах

Реализации для Ethereum и Bitcoin выражали параметр expiry по-разному на семантическом уровне. В AtomicSwap.sol expiry проверяется как абсолютный номер блока:

require(expiry > block.number, "AtomicSwap: expiry cannot be lower than current block");

Это означает, что expiry указывает на конкретный блок. Контракт отклоняет любую инициацию, если этот блок уже пройден.

В Bitcoin script expiry обрабатывается через OP_CHECKSEQUENCEVERIFY. Этот опкод не ссылается на абсолютный блок; он измеряет относительное время, прошедшее с момента создания UTXO. Со стороны Bitcoin expiry — это длительность, а не фиксированный момент времени.

Обе реализации корректно работают по отдельности. Риск возникает при кросс-чейн разработке: разработчик, работающий с обеими сторонами стека, может исходить из неверных предположений о том, что означает expiry, и по мере роста кодовой базы этот семантический разрыв растёт как риск для сопровождаемости и корректности.

OS-CTL-SUG-01; Погашение после истечения срока остаётся возможным

В каноничном дизайне HTLC окно погашения для контрагента и окно возврата средств для инициатора взаимно исключают друг друга. После истечения срока контрагент больше не может погасить средства с помощью секретного прообраза; вернуть средства может только инициатор. Реализация Garden не обеспечивала эту взаимоисключаемость: функцию redeem по-прежнему можно было вызвать после истечения срока контракта как на стороне Ethereum, так и на стороне Bitcoin.

OtterSec выявила две находки, обе классифицированы как Informational; это самый низкий уровень серьёзности, отражающий рекомендации по лучшим практикам, а не эксплуатируемые уязвимости. Проблем уровня Critical, High, Medium или Low выявлено не было.

Действия

OS-CTL-SUG-00 было исправлено обе реализации были приведены к согласованной семантике истечения срока на будущее. OS-CTL-SUG-01 не устранялось, и это решение принято намеренно. Погашение после истечения срока — это структурное свойство; оно не задаёт жёсткой отсечки на счётчике.

Итоги

Две находки уровня informational; одно исправлено, одно намеренно сохранено с документированным обоснованием. Ни одной уязвимости уровня critical, high, medium или low. Никакой эксплуатируемой логики, никаких проблем с контролем доступа, никаких арифметических рисков.

С момента этого обзора Garden завершила оценку безопасности всего протокола с Trail of Bits (апрель 2024 года) и оценку Move-приложения с Zellic (июнь 2025 года). Garden также провела конкурсное баг-баунти через Code4rena (декабрь 2025 года) с призовым фондом $37,500 по 813 заявкам, нацеленное на архитектуру HTLC в EVM, Solana, Sui и Starknet.

Посмотреть полный отчёт OtterSec на GitHub →

Last updated

Related Blogs