
16 января 2025 года SSP Wallet v1.9.0 завершает многонедельный аудит безопасности с Halborn для контрактов Solidity Account Abstraction в SSP — Factory и Account Implementation, стоящих за каждым адресом Ethereum и Sepolia. Аудит вышел чистым в главном: всего три Информационных и две Низких находки, все — в неиспользуемом или мёртвом коде. Мы всё равно решили устранить каждую из них, заново развернуть контракты и выпустить более чистые версии в v1.9.0. Этот повторный деплой — ломающее изменение для пользователей Ethereum и Sepolia: ваш детерминированный адрес в этих двух сетях изменится после обновления.
TL;DR
- Halborn провёл аудит Solidity-части Account Abstraction в SSP: контрактов Factory и Account Implementation.
- Находки: 3 Информационных, 2 Низких, 0 Средних, 0 Высоких. Все — в неиспользуемых или мёртвых путях кода. Ранее развёрнутые контракты были и остаются безопасными.
- Мы всё равно сделали повторный деплой, чтобы кодовая база оставалась полностью чистой — новые контракты Factory и Account Implementation выходят в v1.9.0.
- Ломающее изменение: адреса в Ethereum и Sepolia меняются после обновления. Переведите средства до обновления или обратитесь в поддержку SSP за руководством по миграции.
- Сети UTXO — Bitcoin, Zcash, Bitcoin Cash, Flux — не затронуты.
Что аудировал Halborn
В объёме была Solidity-сторона контрактов ERC-4337 с мультиподписью Schnorr, которые мы выпустили в v1.6.0 и развивали с тех пор. Конкретно: репозиторий @runonflux/account-abstraction — контракт Factory, детерминированно разворачивающий аккаунт при первой транзакции пользователя, и контракт Account Implementation, описывающий, как этот аккаунт валидирует UserOperations, проверяет подписи Schnorr и следует потоку bundler-и-EntryPoint из ERC-4337.
Техническая команда Halborn прогнала весь набор тестов, который они оставляют для боевых смарт-контрактов. Репозиторий, по их словам, надёжен, уважает рекомендации ERC-4337 и реализует Schnorr чисто. Этот вывод важен, потому что реализация Schnorr — это часть проекта с наименьшей предшествующей базой работ: каждая другая часть стэка AA многократно аудирована в индустрии, а агрегированные подписи Schnorr внутри валидатора ERC-4337 — это то, что мы построили сами.
Что они нашли
Отчёт содержит 3 Информационных и 2 Низких находки — ни Средних, ни Высоких, ни Критических. Полный отчёт доступен по адресу halborn.com/audits/influx-technologies/account-abstraction-schnorr-multisig.
Каждая находка лежит в коде, который либо не использовался в живых контрактах, либо был частью пути, не выполнявшегося над реальными средствами пользователей — защитные «леса», остатки ветвей от прошлой итерации, что-то в этом роде. Ни одна не описывает способ для атакующего вывести средства, подделать подпись или сломать аккаунт. Развёрнутые контракты в Ethereum mainnet оставались полностью безопасными в течение всего окна аудита и после него.
Почему мы всё равно сделали повторный деплой
Две причины. Во-первых, чистая кодовая база сама по себе — форма безопасности. Мёртвый код, который компилируется в развёрнутый контракт, — это мёртвый код, в котором придётся разбираться будущим аудиторам, интеграторам и контрибьюторам. Удалив его, мы сокращаем поверхность, которую придётся рассматривать при любом последующем ревью — меньше ветвей, меньше допущений, меньше способов прочесть контракт неверно.
Во-вторых, когда у тебя есть шанс выпустить версию, устраняющую каждую находку, а не откладывающую их, ты его берёшь. Так мы и сделали. v1.9.0 выходит на свежеразвёрнутых контрактах Factory и Account Implementation, включающих каждую рекомендацию Halborn. Стабильной веткой репозитория @runonflux/account-abstraction теперь является main (npm ^1.1.0); ветка master и npm ~1.0.0 остаются доступными тем, кто хочет оставаться на ранее развёрнутых контрактах.
ЛОМАЮЩЕЕ ИЗМЕНЕНИЕ для пользователей Ethereum и Sepolia
Поскольку именно Factory детерминированно выводит адрес вашего аккаунта из ваших публичных ключей, повторный деплой Factory означает, что те же ключи выводят другой адрес. Для пользователей со средствами в Ethereum mainnet или Sepolia это и есть практический эффект v1.9.0: после обновления адрес, который SSP показывает для Ethereum или Sepolia, — новый. Любые ETH или ERC-20, лежащие на старом адресе, сами не сдвинутся.
Есть два безопасных способа это пройти. Прямой путь — вывести средства со старого адреса до обновления: отправьте их в другой кошелёк или на биржу, затем обновитесь, затем отправьте на ваш новый адрес. Второй путь, для пользователей, которые уже обновились или у которых более крупные или сложные позиции, — связаться с поддержкой SSP за руководством по миграции, чтобы мы провели вас через возврат старых средств со старыми контрактами.
Сети UTXO не затронуты. Адреса Bitcoin, Zcash, Bitcoin Cash и Flux выводятся из ваших ключей без участия EVM-контракта, поэтому v1.9.0 не меняет эти адреса. Затронуты только Ethereum и Sepolia.
Дальше будет больше
Эта статья касается именно аудита контрактов AA, в день его выхода. Более широкая история — полный набор ревью Halborn по SSP Wallet, контрактам и SDK — изложена в Внутри аудитов Halborn для SSP в 2025 году, где этот аудит помещён в контекст двух остальных.
Источник: Заметки о релизе SSP Wallet v1.9.0.